公平席位分配的比例+惯例法和Q值法

来源:互联网 发布:socket编程语言 编辑:程序博客网 时间:2024/04/29 11:26
#include<iostream>#include<cmath>#define N 50using namespace std;int main()                                                 //比例+惯例法{int n[N], p[N], nsum, sum1, sum, m, i, j, k,  r;float c[N];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 50using namespace std;int main()                                   //Q值法{int n[N],p[N],nsum,sum1,sum,m,i,j; float q[N];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;}


0 0
原创粉丝点击