7-20(排序) 奥运排行榜(25 分)
生活随笔
收集整理的這篇文章主要介紹了
7-20(排序) 奥运排行榜(25 分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
7-20(排序)奧運排行榜
每年奧運會各大媒體都會公布一個排行榜,但是細心的讀者發現,不同國家的排行榜略有不同。比如中國金牌總數列第一的時候,中國媒體就公布“金牌榜”;而美國的獎牌總數第一,于是美國媒體就公布“獎牌榜”。如果人口少的國家公布一個“國民人均獎牌榜”,說不定非洲的國家會成為榜魁…… 現在就請你寫一個程序,對每個前來咨詢的國家按照對其最有利的方式計算它的排名。
輸入格式:
輸入的第一行給出兩個正整數N和M(≤224,因為世界上共有224個國家和地區),分別是參與排名的國家和地區的總個數、以及前來咨詢的國家的個數。為簡單起見,我們把國家從0 ~ N?1編號。之后有N行輸入,第i行給出編號為i?1的國家的金牌數、獎牌數、國民人口數(單位為百萬),數字均為[0,1000]區間內的整數,用空格分隔。最后面一行給出M個前來咨詢的國家的編號,用空格分隔。
輸出格式:
在一行里順序輸出前來咨詢的國家的排名:計算方式編號。其排名按照對該國家最有利的方式計算;計算方式編號為:金牌榜=1,獎牌榜=2,國民人均金牌榜=3,國民人均獎牌榜=4。輸出間以空格分隔,輸出結尾不能有多余空格。
若某國在不同排名方式下有相同名次,則輸出編號最小的計算方式。
輸入樣例:
4 4 51 100 1000 36 110 300 6 14 32 5 18 40 0 1 2 3輸出樣例:
1:1 1:2 1:3 1:4跟舍友整了一兩個小時
代碼:
#include<iostream> #include<algorithm> using namespace std; int n,m; struct Node{int num;int gold;int medal;int popu;double ave_medal;double ave_gold;int ranking;int way;}Country[250];int cmp1(Node a,Node b){return a.gold>b.gold; } int cmp2(Node a,Node b){ return a.medal>b.medal;} double cmp3(Node a,Node b){ return a.ave_gold>b.ave_gold;} double cmp4(Node a,Node b){ return a.ave_medal>b.ave_medal;}void sort_bygold(Node Cou[]){sort(Country+1,Country+n+1,cmp1);//for(int i=1;i<=n;i++)cout<<" **"<<Country[i].gold;cout<<endl;int a[250];for(int i=1;i<=n;i++){a[i]=i;if(Country[i].gold==Country[i-1].gold){a[i]=a[i-1];}if(Country[i].ranking>a[i]){Country[i].ranking=a[i];}Country[i].way=1; }}void sort_bymedal(Node Cou[]){sort(Country+1,Country+n+1,cmp2);// for(int i=1;i<=n;i++)cout<<" **"<<Country[i].medal;cout<<endl;int a[250];for(int i=1;i<=n;i++){a[i]=i;if(Country[i].medal==Country[i-1].medal){a[i]=a[i-1];}if(Country[i].ranking>a[i]){Country[i].ranking=a[i];Country[i].way=2;}}}void sort_byave_gold(Node Cou[]){sort(Country+1,Country+n+1,cmp3);// for(int i=1;i<=n;i++)cout<<" **"<<Country[i].ave_gold;cout<<endl;int a[250];for(int i=1;i<=n;i++){a[i]=i;if(Country[i].ave_gold==Country[i-1].ave_gold){a[i]=a[i-1];}if(Country[i].ranking>a[i]){Country[i].ranking=a[i];Country[i].way=3;}}}void sort_byave_medal(Node Cou[]){sort(Country+1,Country+n+1,cmp4); //for(int i=1;i<=n;i++)cout<<" **"<<Country[i].ave_medal;cout<<endl;int a[250];for(int i=1;i<=n;i++){a[i]=i;if(Country[i].ave_medal==Country[i-1].ave_medal){a[i]=a[i-1]; }if(Country[i].ranking>a[i]){Country[i].ranking=a[i];Country[i].way=4;}}} int main(){int cou[250];cin>>n>>m;for(int i=1;i<=n;i++){cin>>Country[i].gold>>Country[i].medal>>Country[i].popu;Country[i].num=i;Country[i].ranking=250;Country[i].way=0;Country[i].ave_gold=Country[i].gold*1.0/Country[i].popu*1.0;Country[i].ave_medal=Country[i].medal*1.0/Country[i].popu*1.0;}sort_bygold(Country);sort_bymedal(Country);sort_byave_gold(Country);sort_byave_medal(Country);for(int i=1;i<=m;i++) {cin>>cou[i]; }for(int j=1;j<=m;j++){for(int i=1;i<=n;i++){if(Country[i].num==cou[j]+1){if(j==1) cout<<Country[i].ranking<<":"<<Country[i].way;else cout<<" "<<Country[i].ranking<<":"<<Country[i].way;}} }return 0; }
?
轉載于:https://www.cnblogs.com/xuyibao/p/7764021.html
總結
以上是生活随笔為你收集整理的7-20(排序) 奥运排行榜(25 分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何把VS Code的Language
- 下一篇: 101PPT游戏化换肤遇到的问题