1. 程式人生 > >Codeup_575I_剪刀石頭布

Codeup_575I_剪刀石頭布

並且 ostream img print 石頭 edi for 次數 switch

題目描述

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

技術分享圖片

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

輸入

輸入第1行給出正整數N(<=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

思路:首先用swich語句得到B贏到的次數,A贏得的次數和兩者平局的次數;同時得到A和B分別在B,C,J三種情況贏得的次數;
下一步則是,通過一個循環,得到A和B分別在B,C,J贏得最多次的下標,最終輸出。(B,C,J剛好也滿足26為字母的順序)。
AC代碼:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main(void
) { freopen("in.txt","r",stdin); long long n,Awin=0,Bwin=0,same=0,Awin_zifu[3]={0},Bwin_zifu[3]={0},Amax=0,Bmax=0; char a,b,d[3]={B,C,J}; cin>>n; while(n--) { cin>>a>>b; if(a == b) { ++same; continue; } switch(a) {
case B: if(b == J) { ++Bwin; ++Bwin_zifu[2]; } else { ++Awin; ++Awin_zifu[0]; } break; case C: if(b == B) { ++Bwin; ++Bwin_zifu[0]; } else { ++Awin; ++Awin_zifu[1]; } break; case J: if(b == C) { ++Bwin; ++Bwin_zifu[1]; } else { ++Awin; ++Awin_zifu[2]; } break; } } for(int i=1;i<3;i++) { if(Awin_zifu[i]>Awin_zifu[Amax]) {Amax=i;} if(Bwin_zifu[i]>Bwin_zifu[Bmax]) {Bmax=i;} } cout<<Awin<<" "<<same<<" "<<Bwin<<endl<<Bwin<<" "<<same<<" "<<Awin<<endl<<d[Amax]<<" "<<d[Bmax]<<endl; //printf("%lld %lld %lld\n%lld %lld %lld\n%c %c\n",Awin,same,Bwin,Bwin,same,Awin,d[Amax],d[Bmax]); fclose(stdin); return 0; }

Codeup_575I_剪刀石頭布