材料1202 包阳 201298306
席位分配问题
问题:
甲乙两个部门分别有人数a1,a2。现有代表的名额数为N,如何分配代表人数才能维持相对公平?
解决:
在公平的条件下,让甲乙各分配n1,n2个代表,然后采取相对不公平度((a1/n1-a2/n2)/(a2/n2))指导分配,采用递推法,即对哪个部门不公平,则下一个名额就相应分配给这个部门。
编写程序如下:
#include int main () { double a1,a2; int N,n1,n2; printf(\"请输入甲乙两个部门的人数a1,a2:\\n\"); scanf(\"%lf%lf\ printf(\"请输入代表总数及甲乙两部门在公平的情况下已经分得的代表人数N,n1,n2:\\n\"); scanf(\"%d%d%d\L1:if ((a1/n1-a2/n2)/(a2/n2)>=0) { if (n1+n2else if((a1/n1-a2/n2)/(a2/n2)<0) { if (n1+n2L2:printf(\"甲部门分得n1=%d\\n乙部门分得n2=%d\\n\return 0; }可以通过在程序中输入两部门人数,以及代表名额数,获得相对公平的分配方案。
运行如下: