2012-09-25 183 views
0

當前正在完成一項任務,要求用戶提供學生人數,然後計算需要多少部分,以便需要最少的部分(每部分有35名學生)。使用Modulus進行計算

我一直在搞清楚如何使用模數來執行計算之一(我們提供了所需程序的示例運行)。

這是我的,我知道它不是很多,但即使只是一個普遍的想法會有所幫助。

if (stdnt % std == 0) { 
     sec = stdnt/std; 

} 
# of students # of sections standard section last section 
351    11    32    31 

這只是程序的一部分。

我的問題:

我無法弄清楚如何做計算,這樣如果有剩餘的部分尺寸縮小到適合它所有的學生。

例如 用戶輸入350,每段最多有35個點,因此有10個段。我無法弄清楚如何獲得351如上表所示。

+0

那麼,您的問題到底是什麼? – Dai

+0

如果學生人數沒有按學生人數平均分配,那麼剩餘部分需要多一節。 'sec = stdnt/std;如果(stdnt%std!= 0)++ sec;' – jrok

+0

一個側面說明,如果你打算在/和%在同一個函數,然後節省自己一些努力,並使用div。 http://www.cplusplus.com/reference/clibrary/cstdlib/div/ –

回答

0

有每部MAX_PER_SECTION(35這裏)學生最大限度。然後,寫

number_of_students = q * MAX_PER_SECTION + r 

0 <= r < MAX_PER_SECTION。如果r == 0,那麼q部分就夠了,否則我們需要q+1。你可以得到這個數字只是每

number_of_sections = (number_of_students - 1)/MAX_PER_SECTION + 1; 

現在它仍然以確定部分學生當中的最佳分配,使學生在最大和最小的段數之間的差異最小化。 (你總是可以做出差異0或1)同樣,使用帶餘除法寫

number_of_students = s * number_of_sections + t 

0 <= t < number_of_sections。那麼我們需要t部分的學生s+1,剩下的number_of_sections - t部分會拿s的學生。

在該示例

351 = 10 * 35 + 1, number_of_sections = (351 - 1)/35 + 1 

所以我們需要11個部分,並

351 = 31 * 11 + 10, 

因此我們需要32名學生10個切片和31

+0

r,q,s和t代表什麼?我不明白。 –

+0

'q'是分區'number_of_students/MAX_PER_SECTION'的商,'r'是該分區的其餘部分。對's'和't'同樣如此。因此'q <= number_of_students/MAX_PER_SECTION

+0

我不明白你在這裏說了什麼:number_of_students = q * MAX_PER_SECTION + r,0 <= r

0

模運算計算除法後的餘數。記得式

X =(X DIV N)+(X MOD N)

其中 「X」 和 「n」 是整數, 「DIV」 表示整數除法和 「MOD」 表示模運算。從這一點,你可以得到一個C代碼:

int of_students  = 351; 
int standard_section = 35; 

int last_section  = of_students % standard_section; 
int of_sections  = of_students/standard_section; 
if(last_section != 0) ++of_sections; 
+0

而不是隻發佈一段代碼,請*解釋*爲什麼這段代碼解決了問題。沒有解釋,這不是一個答案。 –

0

好模給你剩下,如果餘數是大於零,你需要爲剩餘的學生另一段。因此,例如,將你的351名學生分爲每個學生人數(35),將給你10個部分,然後使用模數運算符:351%35將返回1的餘數,所以你需要一個額外的部分來適應一名學生。

所需部分的數目。因此僞代碼是:

number_of_sections = 351/35 
if(351%1 > 0) number_of_sections += 1 
0
int numOfSections = numOfStudent/sizeOfSection; 

基本上一個部這將給你如果沒有剩餘部分的數量,那麼你想做一個if語句來檢查如果有餘數。如果是這樣,則將numOfSection加1。

if(numOfStudent % sizeOfSection != 0) 
    numOfSection++;