2013-01-06 23 views
0

對不起,如果此問題之前已被詢問,但無法找到與我正在嘗試執行的操作相匹配的匹配項。根據大小對數字範圍進行分區,然後查找該範圍內給定數字的分區的起始位置

我正在尋找一種算法在C#(或相關的LINQ擴展)中執行以下操作。

給定一組數字(例如56 of 1 to 245)不排除任何數字 和分區大小(例如10) 我想找到的分區給定的數字是起始號碼中的號碼。

實施例: 搜索56.

1-10 
11-20 
21-30 
31-40 
41-50 
51-60 <-- 56 is in the partition starting with 51 
.. 
231-240 
241-245 

回答

4
int page = 56; 
int partition_size = 10; 

int starting_number = (page/partition_size) * partition_size + 1; 
+1

確定,所以如果我在看該權利其(56/10)= 5.6,但作爲int它是5。然後(5 * 10)+ 1 = 51.看起來很好,很容易,而我卻讓自己感到困惑。謝謝 – Pricey

+1

@Pricey當你分割整數的結果總是一個整數所以是 – cheesemacfly

+0

我剛剛發現,這不適用於分區中的最後一個數字,即20/10 * 10 + 1 = 21所以得到小心那個。 – Pricey

1

起始頁在VB.Net有稱爲DivRem一個數學函數,它除以兩個實數並給出餘數。這與其他解決方案基本相同,但是當您使用內置的數學函數時,它擴展了您的視野。

 Dim startingindex, inputparam, delta As Integer 
     delta = 10 
     inputparam = 56 
     startingindex = inputparam - Math.DivRem(inputparam, delta, startingindex) 

結果是:startingindex = 51

+0

+1指向我相關的數學函數。 – Pricey