2012-09-25 110 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++;