0

目前正在处理一项要求用户提供学生人数的作业,然后计算需要多少个部分,以便需要最少的部分(每个部分有 35 名学生)。

我一直在弄清楚如何使用模数来执行其中一项计算(我们提供了所需程序的示例运行)。

这就是我所拥有的,我知道这并不多,但即使只是一个一般性的想法也会有所帮助。

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

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

这只是该计划的一部分。

我的问题:

我不知道如何进行计算,以便如果有剩余部分,则部分大小会缩小以适合所有学生。

例如 用户输入 350,每个部分最多有 35 个点,因此有 10 个部分。如上表所示,我无法弄清楚如何获得 351。

4

4 回答 4

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;
于 2012-09-25T23:03:22.780 回答
0

那么模数给你余数,如果余数大于零,你需要为剩下的学生准备另一个部分。因此,例如,将您的 351 名学生除以每个部分的学生人数 (35) 将得到 10 个部分,然后使用模运算符:351%35 将返回余数 1,因此您需要一个额外的部分来容纳它一名学生。

因此,所需部分数量的伪代码是:

number_of_sections = 351/35
if( 351%1 > 0 ) number_of_sections += 1
于 2012-09-25T23:10:43.533 回答
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 名学生。

于 2012-09-25T23:24:27.777 回答
0
int numOfSections = numOfStudent / sizeOfSection;

基本上,如果没有余数,这将为您提供部分的数量,然后您要创建一个 if 语句来检查是否有余数。如果是这样,请将 1 添加到 numOfSection。

if(numOfStudent % sizeOfSection != 0)
   numOfSection++;
于 2012-09-26T01:14:26.090 回答