我的项目的完全高级概述是将x个学生分成y个班级,同时在每个班级中保持大致相同数量的学生。
即。如果有100名学生和5个班级(x = 100,y = 5),每班应该有20名学生。对于这种情况,我可以使用以下代码:
int maxNumberPerClass = x / y;
然而,当有97名学生和5个班级时,上述代码出现问题。是的,每个班级的学生人数相同,但是一些学生不会被安排,因为需要有两个20和30个班级的班级。
对这个问题的增量和有点hacky修复将产生四个大小为20的类和一个大小为17的类。
int maxNumberPerClass = ceil(x / y);
此方法的问题是最后一个类(数组中的最后一个项)将始终包含最少数量的学生。如果这个班级和其他班级之间的偏差只是一个学生,那么这不会成为问题。但在这种情况下它是两个,这将是不公平的。
将X学生分成Y课程的最佳方法是什么?该课程包含尽可能多的学生?
答案 0 :(得分:3)
int minNumberOfStudents = floor(x / y);
int maxNumberOfStudents = minNumberOfStudents + 1;
int numberOfClassesWithMaxStudents = x - (minNumberOfStudents * y);
int numberOfClassesWithMinStudents = y - numberOfClassesWithMaxStudents;
答案 1 :(得分:2)
如果没有说明您正在使用哪个班级,就无法做到这一点。
'增量'用来计算下一个是什么;课程大小将给剩余的学生和剩余的课程:
int remainingStudents = 97;
int remainingClasses = 5;
int nextClass = nextClassSize(remainingStudents, remainingClasses);
其中nextClassSize(...)
类似于:
return (remainingStudents - 1 + remainingClasses) / remainingClasses;
将其放入ideone here