计算可以在数组中的最大对象数

时间:2014-12-13 16:28:36

标签: objective-c arrays max equality

我的项目的完全高级概述是将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课程的最佳方法是什么?该课程包含尽可能多的学生?

2 个答案:

答案 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