数学建模竞赛题
答案:4 悬赏:30 手机版
解决时间 2021-03-07 22:10
- 提问者网友:你给我的爱
- 2021-03-07 00:09
学校共1000名学生,235人住在A寝室,333人住B寝室,432人住C寝室。学生们要组织个10人委员会,试用下列方法分配各寝室的委员数。(1)按比例分配取整数的名额后,剩下名额按惯例分给小数部分最大者。(2)Q值方法。
最佳答案
- 五星知识达人网友:廢物販賣機
- 2021-03-07 01:08
当年我的C++代码
#include <iostream>
using namespace std;
int main(){//p[i]是第i方人数,n[i]是第i方分配人数,Q[i]是第i方Q值
int series,number,distribute;
cout<<"请输入系数,总人数,分配席位数"<<endl;
cin>>series>>number>>distribute;//系数是series
double *Q=new double[series+1];
int *p=new int[series+1];
int *n=new int[series+1];
int sum=0;
for(int i=1;i<=series;++i){
cout<<"请输入第"<<i<<"方人数"<<endl;
cin>>p[i];
sum=sum+p[i];
Q[i]=0;
n[i]=1;
}
if(sum!=number){cout<<"输入人数错误"<<endl;exit(0);}
else cout<<"数据输入完毕,分配结果如下:" <<endl;
for(int j=1;j<=distribute;++j){
int sign=1;
double q=(double)(p[1]*p[1])/(n[1])/(n[1]+1);
for(int i=2;i<=series;++i){
Q[i]=(double)(p[i]*p[i])/(n[i])/(n[i]+1);
if(q<Q[i]){sign=i;q=Q[i];}
}
++n[sign];
}
for(int i=1;i<=series;++i){
cout<<"第"<<i<<"方人数是"<<(n[i]-1)<<endl;
}
delete []Q;
delete []p;
delete []n;
}
#include <iostream>
using namespace std;
int main(){//p[i]是第i方人数,n[i]是第i方分配人数,Q[i]是第i方Q值
int series,number,distribute;
cout<<"请输入系数,总人数,分配席位数"<<endl;
cin>>series>>number>>distribute;//系数是series
double *Q=new double[series+1];
int *p=new int[series+1];
int *n=new int[series+1];
int sum=0;
for(int i=1;i<=series;++i){
cout<<"请输入第"<<i<<"方人数"<<endl;
cin>>p[i];
sum=sum+p[i];
Q[i]=0;
n[i]=1;
}
if(sum!=number){cout<<"输入人数错误"<<endl;exit(0);}
else cout<<"数据输入完毕,分配结果如下:" <<endl;
for(int j=1;j<=distribute;++j){
int sign=1;
double q=(double)(p[1]*p[1])/(n[1])/(n[1]+1);
for(int i=2;i<=series;++i){
Q[i]=(double)(p[i]*p[i])/(n[i])/(n[i]+1);
if(q<Q[i]){sign=i;q=Q[i];}
}
++n[sign];
}
for(int i=1;i<=series;++i){
cout<<"第"<<i<<"方人数是"<<(n[i]-1)<<endl;
}
delete []Q;
delete []p;
delete []n;
}
全部回答
- 1楼网友:未来江山和你
- 2021-03-07 02:24
对不起,依初一的角度来看是不可能的!
- 2楼网友:旧脸谱
- 2021-03-07 02:14
对不起呵,我实在做不出。
- 3楼网友:过活
- 2021-03-07 02:09
自己看书,姜启源的《数学模型》里面的公平分别席位问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯