公平的席位分配数学模型 程序实现

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

//公平的席位分配数学模型 程序实现

//作者:苗杰(nutting,逸天)2004.07.28 qq:12872678 e-mail:nutting@163.com

//摘自:数学模型(第二版) P32 姜启源 编 高等教育出版社 isbn 7-04-004502-2

//vc++5.0下通过,其他编译系统下请适当修改

const int N=3; //会议中共有 N 方

const int M=21; //会议中共有 M 个席位

#include <iostream.h>

void main()

{

float people[N+1]={0,103,63,34}; //各方参加会议的人数,p[0]不用

int seat[N+1]={0,1,1,1}; //各方被分配的席位数,初始1,然后程序自动调整

float q[N+1]; //各方的相对公平值

float q_max(0); //每增加一个席位时,各方相对公平值的最大的值

int i,j; //循环变量

int q_max_pos(0); //具有最大公平值的是第几方

int seat_sum(0); //计算机已完成分配的席位总数

while(seat_sum<M-1) //循环,直到M个席位分配完

{

seat_sum=0; //本次已分配席位总数清0

for(i=1;i<=N;i++)

seat_sum+=seat[i]; //求计算机本次已完成分配的席位总数

for(j=1;j<=N;j++)

q[j]=(people[j]*people[j])/(seat[j]*(seat[j]+1)); //计算各方的相对公平值

for(j=1,q_max=q[1],q_max_pos=1;j<=N;j++)

if (q[j]>q_max)

{

q_max=q[j];

q_max_pos=j;

} //找q[j]中的最大值,即哪方的相对公平值最大

seat[q_max_pos]++; //将这个席位分配给相对公平值最大的那方

}

for(i=1;i<=N;i++)

cout<<i<<" "<<seat[i]<<endl; //输出结果,各方得到的席位数

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航