数学建模---席位分配
09-04
材料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",&a1,&a2);
printf("请输入代表总数及甲乙两部门在公平的情况下已经分得的代表人数N,n1,n2:\n");
scanf("%d%d%d",&N,&n1,&n2);
L1:if ((a1/n1-a2/n2)/(a2/n2)>=0)
{
if (n1+n2
{
n1++; goto L1;
}
else
goto L2;
}
else if
((a1/n1-a2/n2)/(a2/n2)
{
if (n1+n2
{
n2++;goto L1;
}
else
goto L2;
}
L2:printf("甲部门分得n1=%d\n乙部门分得n2=%d\n",n1,n2);
return 0;
}
可以通过在程序中输入两部门人数,以及代表名额数,获得相对公平的分配方案。
运行如下: