pat 乙级 1018 锤子剪刀布(C++)
生活随笔
收集整理的這篇文章主要介紹了
pat 乙级 1018 锤子剪刀布(C++)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目
兩人玩錘子剪刀布,現(xiàn)給出兩人的交鋒記錄,請(qǐng)統(tǒng)計(jì)雙方的勝、平、負(fù)次數(shù),并且給出雙方分別出什么手勢的勝算最大。
輸入格式:
輸入第 1 行給出正整數(shù) N(≤105 ),即雙方交鋒的次數(shù)。隨后 N 行,每行給出一次交鋒的信息,即甲、乙雙方同時(shí)給出的的手勢。C 代表“錘子”、J 代表“剪刀”、B 代表“布”,第 1 個(gè)字母代表甲方,第 2 個(gè)代表乙方,中間有 1 個(gè)空格。
輸出格式:
輸出第 1、2 行分別給出甲、乙的勝、平、負(fù)次數(shù),數(shù)字間以 1 個(gè)空格分隔。
第 3 行給出兩個(gè)字母,分別代表甲、乙獲勝次數(shù)最多的手勢,中間有 1 個(gè)空格。
如果解不唯一,則輸出按字母序最小的解。
輸入樣例:
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分析
- 求解雙方勝、負(fù)、平次數(shù),只需每次輸入數(shù)據(jù)時(shí)進(jìn)行判斷然后累加即可,注意一人勝另一人負(fù)。
- 求解雙方勝利次數(shù)最多的手勢,且如果解不唯一,選擇字母序小的。可用數(shù)組下標(biāo)來順序?qū)?yīng)B、C、J來解決。
- 可使用一個(gè)結(jié)構(gòu)體來存儲(chǔ),成員包括victory,draw,defeat,count[3]。聲明兩個(gè)結(jié)構(gòu)體變量時(shí),聲明為全局變量。這樣編譯器會(huì)將變量初始化,不用再自己另外再初始化。
AC代碼
#include<iostream> using namespace std; struct node {int count[3];int victory,draw,defeat; }A,B; int game(char A,char B) {if(A==B)return 0;else if((A=='C'&&B=='J')||(A=='B'&&B=='C')||(A=='J'&&B=='B'))return 1;elsereturn 2; }int main() {int i,N;char ch1,ch2; cin>>N;for(i=0;i<N;i++){cin>>ch1>>ch2;int temp=game(ch1,ch2);if(temp==0){A.draw++;B.draw++;}else if(temp==1){A.victory++;B.defeat++; if(ch1=='B')A.count[0]++; else if(ch1=='C')A.count[1]++;elseA.count[2]++;}else{B.victory++;A.defeat++;if(ch2=='B')B.count[0]++; else if(ch2=='C')B.count[1]++;elseB.count[2]++;}}cout<<A.victory<<" "<<A.draw<<" "<<A.defeat<<endl;cout<<B.victory<<" "<<B.draw<<" "<<B.defeat<<endl;int max_A=A.count[0],max_B=B.count[0],flag1=0,flag2=0;for(i=1;i<3;i++){if(A.count[i]>max_A){max_A=A.count[i];flag1=i; }if(B.count[i]>max_B){max_B=B.count[i];flag2=i; } }if(flag1==0) cout<<"B ";else if(flag1==1)cout<<"C ";elsecout<<"J ";if(flag2==0) cout<<"B";else if(flag2==1)cout<<"C";elsecout<<"J";return 0; }如果小伙伴有任何問題或者建議,歡迎評(píng)論區(qū)留言或者私信博主哦
更多題解
pat 乙級(jí) 題解匯總(持續(xù)更新)(C++)
總結(jié)
以上是生活随笔為你收集整理的pat 乙级 1018 锤子剪刀布(C++)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宠溺甜甜的情侣网名149个
- 下一篇: 小米路由不联网怎样访问小米路由硬盘如何用