使用模数计算

时间:2012-09-25 22:56:12

标签: c

目前正在进行一项将要求用户提供学生人数的作业,然后计算需要多少部分,以便需要最少的部分(每个部分有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 个答案:

答案 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。然后,我们需要ts+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++;