PAT乙級1018 錘子剪刀布(測試點1 2 4)

2021-10-19 15:39:15 字數 1543 閱讀 9819

原題鏈結1018 錘子剪刀布

本題本來是一道簡單題,但是我竟然提交了不下十次,就是有三個點是錯誤的,即測試點1、2、4。這也說明了思路是正確的。

其實問題出在了輸出使得各自獲勝次數最多的手勢上面。

自定義測試樣例

1

c c

按照題目意思,這種情況為進行了一次交鋒,並且是平局,也就是說甲和乙都沒有勝利,此時按照題意,在第三行應該輸出的是b b,因為甲和乙都沒有贏,即對於每個人來說,b、c、j三種手勢,每個手勢下贏的次數都是0,此時都應該輸出b。

原**為

#include

#include

using

namespace std;

int jw =

0,yw =

0,tiecnt =0;

map<

char

,int

> mp,cntj,cnty;

char

getans

(map<

char

,int

>

& cnt)

return ans;

}int

main()

else

}printf

("%d %d %d\n"

,jw,tiecnt,yw)

;printf

("%d %d %d\n"

,yw,tiecnt,jw)

;printf

("%c %c\n"

,getans

(cntj)

,getans

(cnty));

return0;

}

單獨來看裡面獲得使得當前人獲勝次數最多的手勢的**

char

getans

(map<

char

,int

>

& cnt)

return ans;

}

問題就出在這裡面,這是因為,mapcnt,並不一定含有全部的b、c、j對映。

比如當資料為上述自定義的資料時,在整個main的for迴圈中,僅僅是走了平局的分支,其餘兩個分支都沒有走,也就是說,此時cntj和cnty均是空的,此時再去查詢,並不是想象中的依次遍歷b、c、j對映。

可以在getans函式中將ans賦初值為『b』,即

char

getans

(map<

char

,int

>

& cnt)

return ans;

}

或者是

char

getans

(map<

char

,int

>

& cnt)

return ans;

}

map與unordered_map是隨著資料插入而逐漸插入對映的。並不是想象中的資料。

PAT 乙級 1018 錘子剪刀布

時間限制 100 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 大家應該都會玩 錘子剪刀布 的遊戲 兩人同時給出手勢,勝負規則如圖所示 現給出兩人的交鋒記錄,請統計雙方的勝 平 負次數,並且給出雙方分別出什麼手勢的勝算最大。輸入格式 ...

PAT乙級1018 錘子剪刀布

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

PAT 乙級 1018 錘子剪刀布

大家應該都會玩 錘子剪刀布 的遊戲 兩人同時給出手勢,勝負規則如圖所示 現給出兩人的交鋒記錄,請統計雙方的勝 平 負次數,並且給出雙方分別出什麼手勢的勝算最大。輸入第 1 行給出正整數 n 10 5 即雙方交鋒的次數。隨後 n 行,每行給出一次交鋒的資訊,即甲 乙雙方同時給出的的手勢。c 代表 錘子...