[C_SO39-易] 團體排名
問題描述 :
國際競賽中,總共有 150 項的比賽項目,主辦單位根據各個國家所得到的獎牌數目及種類(金、銀、銅牌)進行團體排名。排名規則為:先比較金牌數,若金牌數相同,則比較銀牌數;若金、銀牌數均相同,則比較銅牌數;若三者均相同,則排名相同。請根據各個國家所得到的獎牌數目及種類,找出冠軍國家。
輸入說明 :
程式輸入的第一行包含一個正整數 n , 1 ≤ n ≤ 100 ,代表接下來有 n 行資料,每一行包含一個字串 ( 國家名稱 ) 和三個整數 ( 金、銀、銅牌的個數 ) ,資料間以一個空格隔開。
輸出說明 :
輸出冠軍的國家。如果有不只一個國家冠軍,則每一行輸出一個國家的名稱,輸出的順序以國家名稱的字典排序。
範例 :
國際競賽中,總共有 150 項的比賽項目,主辦單位根據各個國家所得到的獎牌數目及種類(金、銀、銅牌)進行團體排名。排名規則為:先比較金牌數,若金牌數相同,則比較銀牌數;若金、銀牌數均相同,則比較銅牌數;若三者均相同,則排名相同。請根據各個國家所得到的獎牌數目及種類,找出冠軍國家。
輸入說明 :
程式輸入的第一行包含一個正整數 n , 1 ≤ n ≤ 100 ,代表接下來有 n 行資料,每一行包含一個字串 ( 國家名稱 ) 和三個整數 ( 金、銀、銅牌的個數 ) ,資料間以一個空格隔開。
輸出說明 :
輸出冠軍的國家。如果有不只一個國家冠軍,則每一行輸出一個國家的名稱,輸出的順序以國家名稱的字典排序。
範例 :
輸入範例 | 輸出範例 |
3 US 20 13 34 CN 19 23 43 JP 10 15 20 | US |
- #include <iostream>
- #include<string>
- #include<tuple>
- using namespace std;
- int main() {
- // [C_SO39-易] 團體排名
- int n;
- cin >> n;
- tuple<string, int, int, int> country[n];
- string name;
- int g, s, c;
- for(int i = 0;i < n;i++)
- {
- cin >> name >> g >> s >> c;
- country[i] = make_tuple(name, g, s, c);
- }
- //排金牌數量
- for (int i = 0; i < n; i++)
- {
- int pos = i;
- for (int j = i; j < n; j++)
- {
- if (get<1>(country[j]) > get<1>(country[pos]))
- {
- pos = j;
- }
- }
- swap(country[pos], country[i]);
- }
- //排銀牌數量
- for (int i = 0; i < n; i++)
- {
- int pos = i;
- for (int j = i; j < n; j++)
- {
- if (get<1>(country[j]) == get<1>(country[pos]) && get<2>(country[j]) > get<2>(country[pos]))
- {
- pos = j;
- }
- }
- swap(country[pos], country[i]);
- }
- //排銅牌數量
- for (int i = 0; i < n; i++)
- {
- int pos = i;
- for (int j = i; j < n; j++)
- {
- if (get<1>(country[j]) == get<1>(country[pos]) && get<2>(country[j]) == get<2>(country[pos]) && get<3>(country[j]) > get<3>(country[pos]))
- {
- pos = j;
- }
- }
- swap(country[pos], country[i]);
- }
- //找出第一名
- string ch[100];
- c = 0;
- for(int i = 0;i < n;i++)
- {
- if(get<1>(country[i])==get<1>(country[0])&&get<2>(country[i])==get<2>(country[0])&&get<3>(country[i])==get<3>(country[0]))
- {
- ch[c] = get<0>(country[i]);
- c++;
- }
- }
- //輸出
- if(c == 1)
- {
- cout << get<0>(country[0]) << endl;
- }
- else
- {
- for (int i = 0; i < c; i++)
- {
- int pos = i;
- for (int j = i; j < c; j++)
- {
- if (int(ch[j][0]) < int(ch[pos][0]))
- {
- pos = j;
- }
- }
- swap(ch[pos], ch[i]);
- }
- for(int i = 0;i < c;i++)
- {
- cout << ch[i] << endl;
- }
- }
- return 0;
- }