時間限制:1 秒
記憶體限制:32 兆
特殊判題:否
提交:9031
解決:1952
題目描述:按要求,給國家進行排名。
輸入:有多組資料。
第一行給出國家數n,要求排名的國家數m,國家號從0到n-1。
第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數(百萬)。
接下來一行給出m個國家號。
輸出:排序有4種方式: 金牌總數 獎牌總數 金牌人口比例 獎牌人口比例
對每個國家給出最佳排名排名方式 和 最終排名
格式為: 排名:排名方式
如果有相同的最終排名,則輸出排名方式最小的那種排名,對於排名方式,金牌總數 < 獎牌總數 < 金牌人口比例 < 獎牌人口比例
如果有並列排名的情況,即如果出現金牌總數為 100,90,90,80.則排名為1,2,2,4.
每組資料後加乙個空行。
樣例輸入:
4 44 8 1
6 6 2
4 8 2
2 12 4
0 1 2 3
4 28 10 1
8 11 2
8 12 3
8 13 4
0 3
樣例輸出:
1:31:12:1
1:21:1
1:1
2023年浙江大學計算機及軟體工程研究生機試真題
答疑:
分析:之前看了半天題目都理解不了,大概是這麼個意思:給出需要排序的國家,每個國家分別按照金牌總數 、 獎牌總數 、 金牌人口比例 、 獎牌人口比例四種排名。也即每個國家有四個排名結果,然後選取排名結果最高的排名,如果有並列的排名,則輸出排名方式最小的排名。四種排名分別為1,2,3,4;
注意:這裡有乙個很含糊的情況說明一下。就是給出需要排名的國家號不一定都是按照公升序排列的,也就是說可以這樣給3,1,2,0(需要排序的國家號)。這個問題因為沒有考慮到導致提交一直通不過。
我寫的**如下:
#include #include #include using namespace std;
struct pm //對所有國家的排名進行儲存
temp[1000][4];
struct country
array[1000],b[1000];//b存的是參與排名的國家,num表示參與排名的給出的國家先後
int cmp1(const country &a,const country &b)
int cmp2(const country &a,const country &b)
int c***(const country &a,const country &b)
int cmp4(const country &a,const country &b)
int cmp5(const pm &a,const pm &b)
for(int i=0;i>j;
b[i]=array[j];
b[i].num=i;
}sort(b,b+c2,cmp1);//對金牌排序
for(int i=0;i第二個思路是借鑑別人的,排序也是純粹的自己寫的,感覺邏輯挺好,就拿過來比對一下。
/*********************************
* 日期:2013-3-3
* 題號: 九度oj 題目1007:奧運排序問題
* 結果:ac
* 總結:
**********************************/
#include#include#include//結構體
typedef struct countrycountry;
country country[1000];
int main ()
//給出要排序的m個國家號。
for(i = 0;i < m;i++)
for(i = 0;i < m;i++)
} countrysort[i].bestrank = countrysort[i].rank;
//printf("j:%d\n",countrysort[i].bestrank);
countrysort[i].skind = 1;
//獎牌數排序
countrysort[i].rank = 1;
for(j = 0;j < n;j++)
} if(countrysort[i].rank < countrysort[i].bestrank)
//printf("j2:%d\n",countrysort[i].rank);
//金牌人口比例排序
countrysort[i].rank = 1;
for(j = 0;j < n;j++)
} if(countrysort[i].rank < countrysort[i].bestrank)
//printf("j3:%d\n",countrysort[i].rank);
//獎牌人口比例排序
countrysort[i].rank = 1;
for(j = 0;j < n;j++)
} if(countrysort[i].rank < countrysort[i].bestrank)
//printf("j4:%d\n",countrysort[i].rank);
//輸出
printf("%d:%d\n",countrysort[i].bestrank,countrysort[i].skind);
} //每組資料後加乙個空行。
printf("\n");
}//while
return 0;
}
下面這個是我們班何大神寫的,**量果然降低了不少。
#include #include #include using namespace std;
struct country
a[10000],b[10000];
bool cmp1(country a,country b)
bool cmp2(country a,country b)
bool c***(country a,country b)
bool cmp4(country a,country b)
int rank[10000][4];
int n,m;
int main()
for (int i=0;i>r;
b[i]=a[r];
b[i].index=i;
}sort(b,b+m,cmp1);
rank[b[0].index][0]=1;
for (int i=1;i
題目1007 奧運排序問題
題目1007 奧運排序問題 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 3180 解決 669 題目描述 按要求,給國家進行排名。輸入 有多組資料。第一行給出國家數n,要求排名的國家數m,國家號從0到n 1。第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數 百萬 接下來一行...
題目1007 奧運排序問題
題目1007 奧運排序問題 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 3180 解決 669 題目描述 按要求,給國家進行排名。輸入 有多組資料。第一行給出國家數n,要求排名的國家數m,國家號從0到n 1。第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數 百萬 接下來一行...
題目1007 奧運排序問題(結構體排序)
每個國家根據金牌總數 獎牌總數 金牌人口比例 獎牌人口比例會有四種排序,找到最佳排名。我們用結構體把每個國家的資訊存下來,在進行處理。根據四種不同的排序方式計算得出四種排名。注意 記得最後再把國家按照最大是的順序排回來 事先用id屬性記下序號 有關於sort函式使用詳解請參考 created by ...