PAT (Basic Level) Practice1018 錘子剪刀布
阿新 • • 發佈:2021-03-06
1018 錘子剪刀布
一、題目
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
二、輸入輸出
輸入格式
輸入第 1 行給出正整數 N ( ≤ 1 0 5 ) (≤10^5) (≤105),即雙方交鋒的次數。隨後 N 行,每行給出一次交鋒的資訊,即甲、乙雙方同時給出的的手勢。C 代表“錘子”、J 代表“剪刀”、B 代表“布”,第 1 個字母代表甲方,第 2 個代表乙方,中間有 1 個空格。
輸出格式
輸出第 1、2 行分別給出甲、乙的勝、平、負次數,數字間以 1 個空格分隔。第 3 行給出兩個字母,分別代表甲、乙獲勝次數最多的手勢,中間有 1 個空格。如果解不唯一,則輸出按字母序最小的解。
三、樣例
輸入樣例
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
輸出樣例
5 3 2
2 3 5
B B
四、題目分析
簡單的計數問題,讀入迴圈次數,迴圈讀入字元,通過判斷結果計數,最後輸出勝出做多的手勢是可以使用分類排序,首先按照勝利次數降序排序,其次按照字母序升序排序,最後輸出首位字母。
五、程式碼
#include <bits/stdc++.h>
using namespace std;
struct count_max
{
char ch;
int count;
} jia[3], yi[3];
bool cmp (count_max a, count_max b)
{
if (a.count != b.count)
return a.count > b.count;
else
return a.ch < b.ch;
}
int main()
{
jia[0].ch = 'C', jia[1].ch = 'J', jia[2].ch = 'B';
yi[0].ch = 'C', yi[1].ch = 'J', yi[2].ch = 'B';
int n;
cin >> n;
int jiawin = 0;
int yiwin = 0;
for (int i = 0; i < n; i++)
{
char a, b;
cin >> a >> b;
if (a == 'C')
{
if (b == 'J')
{
jiawin++;
jia[0].count++;
}
else if (b == 'B')
{
yiwin++;
yi[2].count++;
}
}
else if (a == 'B')
{
if (b == 'C')
{
jiawin++;
jia[2].count++;
}
else if (b == 'J')
{
yiwin++;
yi[1].count++;
}
}
else if (a == 'J')
{
if (b == 'B')
{
jiawin++;
jia[1].count++;
}
else if (b == 'C')
{
yiwin++;
yi[0].count++;
}
}
}
sort(jia, jia + 3, cmp);
sort(yi, yi + 3, cmp);
cout << jiawin << ' ' << n - jiawin - yiwin << ' ' << yiwin << '\n';
cout << yiwin << ' ' << n - jiawin - yiwin << ' ' << jiawin << '\n';
cout << jia[0].ch << ' ' << yi[0].ch;
return 0;
}