1018 錘子剪刀布
一、題目
大家應該都會玩“錘子剪刀布”的游戲:兩人同時給出手勢,勝負規則如圖所示:

現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,并且給出雙方分別出什么手勢的勝算最大,
二、輸入輸出
輸入格式
輸入第 1 行給出正整數 N ( ≤ 1 0 ? 5 ) (≤10^?5) (≤10?5),即雙方交鋒的次數,隨后 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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262116.html
標籤:其他
