您的位置:首页 > 其它

数学建模四 公平席位分配的比例+惯例法和Q值法

2017-04-20 14:20 274 查看
#include<iostream>
#include<cmath>
#define N 50
using namespace std;
int ma
4000
in()                                                 //比例+惯例法
{
int n
, p
, nsum, sum1, sum, m, i, j, k,  r;
float c
;
sum = 0;sum1 = 0;j = 0;
cout << "please enter m n" << endl;
cin >> m >> nsum;
cout << "please enter pi " << endl;
for (i = 0;i < m;i++)cin >> p[i];
for (i = 0;i < m;i++)sum = sum + p[i];
for (i = 0;i < m;i++) n[i] = floor(((float)p[i] / sum)*nsum);
for (i = 0;i < m;i++)sum1 = sum1 + n[i];
k = nsum - sum1;
for (i = 0;i < m;i++)c[i] = ((float)p[i] / sum)*nsum - n[i];
for (r = 0;r < k;r++)
for (i = 0;i < m;i++)
if (c[i] > c[j])j = i;
n[j]++;
c[j] = 0;
for (i = 0;i < m;i++)cout << n[i] << endl;
return 0;
}
#include<iostream>
#include<cmath>
#define N 50
using namespace std;
int main()                                   //Q值法
{
int n
,p
,nsum,sum1,sum,m,i,j;
float q
;
sum=0;sum1=0;j=0;
cout<<"please enter m n"<<endl;
cin>>m>>nsum;
cout<<"please enter pi "<<endl;
for(i=0;i<m;i++)cin>>p[i];
for(i=0;i<m;i++)sum=sum+p[i];
for(i=0;i<m;i++)n[i]=floor(((float)p[i]/sum)*nsum);
for(i=0;i<m;i++)sum1=sum1+n[i];
for(;sum1<nsum;sum1++)
{
for(i=0;i<m;i++)q[i]=(float)(p[i]*p[i])/(n[i]*(n[i]+1));
for(i=0;i<m;i++)if(q[i]>q[j])j=i;
n[j]++;
}
for(i=0;i<m;i++)cout<<n[i]<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: