您的位置:首页 > 其它

题目1007:奥运排序问题

2013-12-07 19:40 225 查看
题目描述:按要求,给国家进行排名。输入:有多组数据。第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。接下来一行给出M个国家号。输出:排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例对每个国家给出最佳排名排名方式 和 最终排名格式为: 排名:排名方式如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.每组数据后加一个空行。样例输入:
4 4
4 8 1
6 6 2
4 8 2
2 12 4
0 1 2 3
4 2
8 10 1
8 11 2
8 12 3
8 13 4
0 3
样例输出:
1:3
1:1
2:1
1:2

1:1
1:1
//琢磨了半天才明白题目的意思//用四种方式都排序 选出最好的一种,比如可能分别是1,2,2,4,那么最好的名次就是1,最好的排序方法就是按金牌数来算#include<iostream>using namespace std;struct country{int gold;int medal;double goldpro;double medalpro;}total[100000];int main(){int m,n,i,j,people;int need[100000];while(cin>>n>>m && n){for(i=0;i<n;i++){cin>>total[i].gold>>total[i].medal;cin>>people;total[i].goldpro=(double)total[i].gold/people;total[i].medalpro=(double)total[i].medal/people;}for(i=0;i<m;i++){cin>>need[i];}for(i=0;i<m;i++){int rank[4]={1,1,1,1};for(j=0;j<m;j++)//此方法可以得到1,2,2,4的排名{if(i==j)continue;if(total[need[i]].gold < total[need[j]].gold){rank[0]++;}if(total[need[i]].medal< total[need[j]].medal){rank[1]++;}if(total[need[i]].goldpro < total[need[j]].goldpro){rank[2]++;}if(total[need[i]].medalpro< total[need[j]].medalpro){rank[3]++;}}int high=n+1,seq=0;for(j=0;j<m;j++)//在四种排名中得到最小的,并用seq记录下它的序号{if(rank[j]<high){high=rank[j];seq=j;}}cout<<high<<":"<<seq+1<<endl;}cout<<endl;}return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: