36 奧運排序問題 浙大複試 c

2021-10-05 20:55:17 字數 1377 閱讀 4197

按要求,給國家進行排名。

有多組資料。

第一行給出國家數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 28 10 1

8 11 2

8 12 3

8 13 4

0 3輸出

1:31:1

2:11:2

1:11:1

這道題本意是用sort重定義排序函式,但在這裡換一種思路,只比較每個國家間各項排名,如果小於某一國家排序就加一,這樣比較好理解。

這樣去想就是最後一步輸出麻煩些,要自己寫乙個查詢函式

用物件導向的思想做很合適,給定了奧運金牌數,獎牌數,人口數,和國家序號,這裡注意測試用例中人口數可能為0,要求輸出金牌人口比例 獎牌人口比例則需要處理一下,於是將結構體中所有所有成員定義為float

由上定義結構體,包含goal,model,civil,goalb,modelb

每個測試用例最後一行輸入是需要排名的國家號,我們將存入w並置為1,在後續比較時,只需要把w[i]=1的國家拿出來比較,if 不為1,continue

#include

//不用排序,只要遇見比自己記錄高的把排名+1就行

//國家結構體

struct kuni

;int

main()

//輸入記錄要排名的國家

for(

int i =

0; i)//國家排名

for(

int i =

0; i)//如果人口為0且被除數不為0,則比例都為第一名

if(kuni[i]

.civil <1)

//查詢四種排序方法裡的最小排名

if(goldbr <= modelbr)

else

}else

else}}

printf

("\n");

}return0;

}

這道題研究了兩天,今天終於捋清楚啦,可以往下繼續了

2010 浙大機試 奧運排序問題

題目1007 奧運排序問題 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 9450 解決 2044 題目描述 按要求,給國家進行排名。輸入 有多組資料。第一行給出國家數n,要求排名的國家數m,國家號從0到n 1。第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數 百萬 接下來一...

C 奧運排序問題

按要求,給國家進行排名。有多組資料。第一行給出國家數n,要求排名的國家數m,國家號從0到n 1。第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數 百萬 接下來一行給出m個國家號。排序有4種方式 金牌總數 獎牌總數 金牌人口比例 獎牌人口比例 對每個國家給出最佳排名排名方式 和 最終排名 格...

奧運排序問題

時間限制 1 sec 記憶體限制 32 mb 按要求,給國家進行排名。有多組資料。第一行給出國家數n,要求排名的國家數m,國家號從0到n 1。第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數 百萬 接下來一行給出m個國家號。排序有4種方式 金牌總數 獎牌總數 金牌人口比例 獎牌人口比例 對...