#include <conio.h>
#define size 1000
main()
{
int i,j,m,n,pp[size]; /*********变量**************/
double p[size]; /**********各单位人数********/
double seat[size]; /****各单位分配的席位*******/
double q[size]; /*******相对公平度***********/
double max; /*****相对公平度的最大值*****/
int pos; /****相对公平度最大的单位****/
int sum=0; /*****已分配席位总数*********/
clrscr();
printf("Input the number of units(m):\n");
scanf("%d",&m); /***输入参加分配席位的单位数**/
printf("Input the total number of seats(n):\n");
scanf("%d",&n); /******输入席位总数***********/
printf("Input the number of each unit:\n");
for(i=0;i<m;i++)
scanf("%d",&pp[i]); /*****输入各单位人数**********/
for(i=0;i<m;i++)
{
seat[i]=1.0;
p[i]=pp[i];
}
while(sum<n-1) /***循环条件:席位未分配完时**/
{
sum=0; /**本次已分配席位总数清空为0**/
for(i=0;i<m;i++)
sum=sum+seat[i]; /*****计算本次分配席位总数****/
for(j=0;j<m;j++)
q[j]=pp[j]*pp[j]/(seat[j]*(seat[j]+1)); /*计算各单位相对公平度*/
for(j=0,max=q[0],pos=0;j<n;j++)
if (q[j]>max)
{
max=q[j];
pos=j;
} /*****求相对公平度最大的单位********/
seat[pos]=seat[pos]+1; /*给相对公平度最大的单位增加1个席位*/
}
printf("\n\npeople:\n");
for(i=0;i<m;i++)
printf("%5d",pp[i]); /*****输出各单位人数****/
printf("\nseat:\n%5d\nresult:\n",n); /*****输出席位总数*****/
for(i=0;i<m;i++)
printf(" seat[%d]=%.0f\n",i+1,seat[i]); /*******输出分配结果****/
}