1018 錘子剪刀布 20 分

2021-10-01 03:26:52 字數 1325 閱讀 9888

現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。

輸入格式:

輸入第 1 行給出正整數 n(≤10

​5​​ ),即雙方交鋒的次數。隨後 n 行,每行給出一次交鋒的資訊,即甲、乙雙方同時給出的的手勢。c 代表「錘子」、j 代表「剪刀」、b 代表「布」,第 1 個字母代表甲方,第 2 個代表乙方,中間有 1 個空格。

輸出格式:

輸出第 1、2 行分別給出甲、乙的勝、平、負次數,數字間以 1 個空格分隔。第 3 行給出兩個字母,分別代表甲、乙獲勝次數最多的手勢,中間有 1 個空格。如果解不唯一,則輸出按字母序最小的解。

輸入樣例:

10c j

j bc b

b bb c

c cc b

j bb c

j j輸出樣例:

5 3 2

2 3 5

b b這道題題意很清楚,實現起來也很簡單,但是**很容易寫的很長,我這裡實現的方式簡單,**也很短。

乙個比較坑的地方就是輸出的部分,因為有可能甲或者乙一局都沒有贏過,理論上沒有贏應該輸出空才對,但是沒有贏的話輸出b就行了,仔細分析題目也沒有錯,可以理解為三個手勢都贏了0次,按照字母序最小的就是b。因為這是第三次優化**,忘記了之前是怎麼做的了,所以還在這裡卡了很久@_@。

#include

using

namespace std;

intmain()

for(

int i =

0; i <

2; i++

)char ans_a =

(max_element

(win_a.

begin()

, win_a.

end())

- win_a.

begin()

+'a');

//找甲贏的最多的手勢

char ans_b =

(max_element

(win_b.

begin()

, win_b.

end())

- win_b.

begin()

+'a');

//找乙贏的最多的手勢

cout <<

(ans_a ==

'a'?

'b': ans_a)

<<

" "<<

(ans_b ==

'a'?

'b': ans_b)

;//如果沒有贏過,輸出b;

return0;

}

1018 錘子剪刀布 (20 分)

填坑日記 本題我沒進坑哈哈哈哈 includeusing namespace std int main y 3 ej 3 ey 3 maxj,maxy cin n for i a b if a b b c 甲贏 else if a c b j 甲贏 else if a j b b 甲贏 else i...

1018 錘子剪刀布 (20 分

現給出兩人的交鋒記錄,請統計雙方的勝 平 負次數,並且給出雙方分別出什麼手勢的勝算最大。輸入第 1 行給出正整數 n 10 5 即雙方交鋒的次數。隨後 n 行,每行給出一次交鋒的資訊,即甲 乙雙方同時給出的的手勢。c代表 錘子 j代表 剪刀 b代表 布 第 1 個字母代表甲方,第 2 個代表乙方,中...

1018 錘子剪刀布 (20 分

現給出兩人的交鋒記錄,請統計雙方的勝 平 負次數,並且給出雙方分別出什麼手勢的勝算最大。輸入第 1 行給出正整數 n 10 5 即雙方交鋒的次數。隨後 n 行,每行給出一次交鋒的資訊,即甲 乙雙方同時給出的的手勢。c代表 錘子 j代表 剪刀 b代表 布 第 1 個字母代表甲方,第 2 個代表乙方,中...