三支隊伍(編號 1、2、3)輪流答題,共 n 輪。每輪每隊結果為:right(+10 分)、wrong(-10 分)、give-up(0 分)。最終按得分降序輸出排名,同分同行,編號小者靠前。
輸入:
4
right wrong give-up
right right right
wrong right right
right right right
輸出:
(3,30) (1,20)(2,20)
Nu 與得分 All。n,循環 n 輪,每輪讀取 3 個字符串對應 1、2、3 號隊結果。right +10,wrong -10,give-up 不變。#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
struct Team {
int id;
int score = 0;
};
int main() {
int n;
if (!(cin >> n)) return 0;
vector<Team> teams(3);
for (int i = 0; i < 3; ++i) teams[i].id = i + 1;
string res;
for (int round = 0; round < n; ++round) {
for (int i = 0; i < 3; ++i) {
cin >> res;
if (res == "right") teams[i].score += 10;
else if (res == "wrong") teams[i].score -= 10;
}
}
sort(teams.begin(), teams.end(), [](const Team& a, const Team& b) {
if (a.score != b.score) return a.score > b.score;
return a.id < b.id;
});
for (int i = 0; i < 3; ++i) {
cout << "(" << teams[i].id << "," << teams[i].score << ")";
if (i == 2 || teams[i].score != teams[i+1].score) cout << endl;
else cout << " ";
}
return 0;
}
vector + sort + Lambda 表達式簡化排序邏輯。cin >> string 自動跳過空白字符。