原題鏈結1018 錘子剪刀布
本題本來是一道簡單題,但是我竟然提交了不下十次,就是有三個點是錯誤的,即測試點1、2、4。這也說明了思路是正確的。
其實問題出在了輸出使得各自獲勝次數最多的手勢上面。
自定義測試樣例
1按照題目意思,這種情況為進行了一次交鋒,並且是平局,也就是說甲和乙都沒有勝利,此時按照題意,在第三行應該輸出的是b b,因為甲和乙都沒有贏,即對於每個人來說,b、c、j三種手勢,每個手勢下贏的次數都是0,此時都應該輸出b。c c
原**為
#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 代表 錘子...