PAT B1018 錘子剪刀布 mw的解題思路與優化方案
也是codeup上面題目編號6172的問題 I: 錘子剪刀布
題目
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,規則就不在這放了。現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
輸入
輸入第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
解題思路
題目本身沒什麼另外的含義,總體難度來說也不是很難。就是可能判斷步驟會有點多。我選擇的是甲乙各建立一個長度為3的陣列存放勝、負、平的次數,在另外建立兩個長度為3的陣列存放各個手勢贏得次數。
接下來就是冗長的判斷步驟,對結果進行輸出即可。
我覺得全篇唯一難的點就是在題目輸出中寫的“如果解不唯一,則輸出按字母序最小的解。”這裡了。為此我在儲存勝利手勢的陣列中是按字母序進行存放的,也就是[0]存放的‘B’,[1]存放的是‘C’,[2]存放的是‘J’。判斷時遇到勝利次數相等的數時直接continue就好了。
具體看程式碼,不難理解。
總體程式碼
#include<stdio.h>
int n;
int main(){
scanf("%d",&n);
getchar();
int a[3]={0},b[3]={0},c[3]={0},d[3]={0};
char x,y;
for(int i=0;i<n;i++){
scanf("%c %c",&x,&y);
getchar();
if(x=='C'){
if(y=='C'){
a[1]++;
b[1]++;
}
if(y=='J'){
a[0]++;
b[2]++;
c[1]++;
}
if(y=='B'){
a[2]++;
b[0]++;
d[0]++;
}
}
if(x=='B'){
if(y=='C'){
a[0]++;
b[2]++;
c[0]++;
}
if(y=='J'){
a[2]++;
b[0]++;
d[2]++;
}
if(y=='B'){
a[1]++;
b[1]++;
}
}
if(x=='J'){
if(y=='C'){
a[2]++;
b[0]++;
d[1]++;
}
if(y=='J'){
a[1]++;
b[1]++;
}
if(y=='B'){
a[0]++;
b[2]++;
c[2]++;
}
}
}
int max1=c[0],max2=d[0];
int u=0,v=0;
for(int i=0;i<3;i++){
printf("%d",a[i]);
if(i<2){
printf(" ");
}
else printf("\n");
if(i>0&&max1==c[i]){
continue;
}
else if(max1<c[i]){
max1=c[i];
u=i;
}
}
for(int i=0;i<3;i++){
printf("%d",b[i]);
if(i<2){
printf(" ");
}
else printf("\n");
if(i>0&&max2==c[i]){
continue;
}
else if(max2<d[i]){
max2=d[i];
v=i;
}
}
if(u==0){
printf("B ");
}
else if(u==1){
printf("C ");
}
else if(u==2){
printf("J ");
}
if(v==0){
printf("B\n");
}
else if(v==1){
printf("C\n");
}
else if(v==2){
printf("J\n");
}
return 0;
}
這也是我跨年前就開始寫一直寫到跨年後的程式(簡稱寫了一年),祝各位元旦快樂(* ̄︶ ̄)!
相關文章
- 石頭剪刀布遊戲遊戲
- Python剪刀石頭布遊戲Python遊戲
- 剪刀石頭布程式(Python)Python
- ***4.34-遊戲:剪刀石頭布遊戲
- 剪子布錘遊戲遊戲
- 結對-遊戲《石頭剪刀布》-專案進度遊戲
- Spark效能優化的10大問題及其解決方案Spark優化
- 優化-mysql子查詢索引失效問題解決優化MySql索引
- 系統的優化思路優化
- exists與in子查詢優化優化
- 中國科學家發現石頭剪刀布的制勝策略
- 程式碼日:剪刀石頭布 (RPS) 專案
- 慢Sql優化思路SQL優化
- Oracle rownum 分頁引起的效率問題及優化思路Oracle優化
- 錘子M1值得買嗎 錘子M1評測
- DFSS的解題思路
- 數值最優化—優化問題的解(二)優化
- 詳解SEO布詞以及網站排名優化技巧網站優化
- JAVA效能優化思路探究Java優化
- 【Java效能優化思路方向】Java優化
- Asp.Net線上預覽Word文件的解決方案與思路ASP.NET
- 解決方案製作思路
- vue面試題之vue專案的優化方案Vue面試題優化
- 錘子M1L值得買嗎?錘子M1L評測
- 【BIEB六人行活動】解決文件共享難題的優化思路小結優化
- Bigkey問題的解決思路與方式探索
- 【系統優化】資料庫系統load飆高問題解決思路優化資料庫
- 思路隨筆 關於題庫和組卷功能的優化反思優化
- 淺談前端優化的幾個思路前端優化
- 貼合生產的MySql優化思路MySql優化
- 資料訪問層的優化思路優化
- 一個MySQL優化案例的初步思路MySql優化
- 行轉列的一種優化思路優化
- latch:cache buffers chains的優化思路AI優化
- 錘子重磅新機下月釋出 錘子將帶來什麼驚喜呢?
- Ajax跨越問題原因分析與解決思路
- 子域名資訊蒐集思路與技巧梳理
- HTML5 canvas遊戲開發實戰 5 : 石頭剪刀布HTMLCanvas遊戲開發