题目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;}
相关文章推荐
- 利用GetIfTable ,GetIfEntry 实时判断网线插拔状态
- 关于增强和查找增强点
- DOS系统功能调用表(INT 21H)
- 解决ADB server didn't ACK问题
- 在程式中对键盘、鼠标、显示器、桌面 操作小结
- Linux下例行性工作自结
- 随手链接
- 【Unity3D】【NGUI】UISprite
- R语言的常用函数速查
- 解读ClassLoader
- 修改win7 system32目录权限
- jQuery 学习笔记 事件辅助器
- 流编辑器sed
- 谷歌向左,百度向右
- 数据库-基础2
- webbrowser selstart selLength
- “百度”凭啥一手遮天
- 新思路,坚持创新;好想法,坚持执行
- 为CListCtrl添加item编辑功能
- 新思路,坚持创新;好想法,坚持执行