目前正在进行一项将要求用户提供学生人数的作业,然后计算需要多少部分,以便需要最少的部分(每个部分有35名学生)。
我一直在搞清楚如何使用模数来执行其中一项计算(我们提供了所需程序的示例运行)。
这是我所拥有的,我知道它并不多,但即使只是一个大致的想法也会有所帮助。
if (stdnt % std == 0) {
sec = stdnt / std;
}
# of students # of sections standard section last section
351 11 32 31
这只是该计划的一部分。
我的问题:
我无法弄清楚如何进行计算,以便如果有剩余部分,则缩小部分大小以适应其中的所有学生。
例如 用户输入350,每个部分最多35个点,因此有10个部分。我无法弄清楚如上表所示如何获得351。
答案 0 :(得分: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;
答案 1 :(得分:0)
模数给出余数,如果余数大于零,则剩余学生需要另一部分。因此,例如,将您的351名学生除以每个部分的学生数(35),将为您提供10个部分,然后使用模数运算符:351%35将返回剩余的1,因此您需要一个额外的部分来容纳一个学生。
因此,所需部分数量的伪代码为:
number_of_sections = 351/35
if( 351%1 > 0 ) number_of_sections += 1
答案 2 :(得分: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,
因此我们需要10个部分,32个学生,1个部分31个。
答案 3 :(得分:0)
int numOfSections = numOfStudent / sizeOfSection;
基本上,如果没有剩余部分,这将为您提供部分数量,然后您想要使用if语句检查是否有余数。如果是这样,将1添加到numOfSection。
if(numOfStudent % sizeOfSection != 0)
numOfSection++;