自己后面判断第三行输出的代码写的太冗余太垃圾,只拿到一半分数,刚踢完球累死,下次再改改。。
1018 锤子剪刀布 (20 分)
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第 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
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin>>n;
char A[n],B[n];
int win=0,lose=0,flat=0;//甲赢和输的次数
int A_chuizi=0,A_jiandao=0,A_bu=0;//记录甲赢时候的状态
int B_chuizi=0,B_jiandao=0,B_bu=0;//记录乙赢时候的状态
for(int i=0;i<n;i++){
cin>>A[i]>>B[i];
if(A[i]==B[i])
flat++;
else if((A[i]=='C'&&B[i]=='J')||(A[i]=='B'&&B[i]=='C')||(A[i]=='J'&&B[i]=='B')){
win++;
if(A[i]=='C')
A_chuizi++;
if(A[i]=='J')
A_jiandao++;
if(A[i]=='B')
A_bu++;
}
else{
lose++;
if(B[i]=='C')
B_chuizi++;
if(B[i]=='J')
B_jiandao++;
if(B[i]=='B')
B_bu++;
}
}
cout<<win<<" "<<flat<<" "<<lose<<endl;
cout<<lose<<" "<<flat<<" "<<win<<endl;
if(A_chuizi>=A_jiandao){
if(A_jiandao>=A_bu){
cout<<"C";
}else if(A_chuizi>A_jiandao){
cout<<"C";
}else{
cout<<"B";
}
}else{
if(A_chuizi>=A_bu){
cout<<"J";
}else if(A_bu>=A_jiandao){
cout<<"B";
}else{
cout<<"J";
}
}
cout<<" ";
if(B_chuizi>=B_jiandao){
if(B_jiandao>=B_bu){
cout<<"C";
}else if(B_chuizi>B_jiandao){
cout<<"C";
}else{
cout<<"B";
}
}else{
if(B_chuizi>=B_bu){
cout<<"J";
}else if(B_bu>=B_jiandao){
cout<<"B";
}else{
cout<<"J";
}
}
cout<<endl;
return 0;
}
人家的写的精简多了。。gg
/* 用 getchar() 或 scanf()时写明\n,避免回车被%c读取 */
#include <stdio.h>
int main() {
int N, Awin = 0, Alose = 0;//交锋次数,A赢的次数 和 输的次数
char A, B;
int cnt_A[3] = {0}, cnt_B[3] = {0};//统计各手势获胜的次数
scanf("%d", &N);
for (int i = 0; i < N; i++) {
getchar(); // %c会将回车、空格、换行读入
scanf("%c %c", &A, &B);
if (A == 'B' && B == 'C') {// 注意手势计数下标要正确
Awin++;
cnt_A[0]++;
} else if (A == 'B' && B == 'J') {
Alose++;
cnt_B[2]++;
} else if (A == 'C' && B == 'J') {
Awin++;
cnt_A[1]++;
} else if (A == 'C' && B == 'B') {
Alose++;
cnt_B[0]++;
} else if (A == 'J' && B == 'B'){
Awin++;
cnt_A[2]++;
} else if (A == 'J' && B == 'C') {
Alose++;
cnt_B[1]++;
}
}
printf("%d %d %d\n", Awin, N - Awin - Alose, Alose);
printf("%d %d %d\n", Alose, N - Awin - Alose, Awin);
int maxA = (cnt_A[1] >= cnt_A[2]) ? 1 : 2;
maxA = (cnt_A[0] >= cnt_A[maxA]) ? 0 : maxA;
int maxB = (cnt_B[1] >= cnt_B[2]) ? 1 : 2;
maxB = (cnt_B[0] >= cnt_B[maxB]) ? 0 : maxB;
char str[4] = {"BCJ"};
printf("%c %c\n", str[maxA], str[maxB]);
return 0;
}
就是可读性有点差,不如自己再写。。