1018 錘子剪刀布 (20分)
大家應(yīng)該都會(huì)玩“錘子剪刀布”的游戲:兩人同時(shí)給出手勢(shì),勝負(fù)規(guī)則如圖所示:
現(xiàn)給出兩人的交鋒記錄,請(qǐng)統(tǒng)計(jì)雙方的勝、平、負(fù)次數(shù),并且給出雙方分別出什么手勢(shì)的勝算最大。
輸入格式:
輸入第 1 行給出正整數(shù) N(≤10^?5? ),即雙方交鋒的次數(shù)。隨后 N 行,每行給出一次交鋒的信息,即甲、乙雙方同時(shí)給出的的手勢(shì)。C 代表“錘子”、J 代表“剪刀”、B 代表“布”,第 1 個(gè)字母代表甲方,第 2 個(gè)代表乙方,中間有 1 個(gè)空格。
輸出格式:
輸出第 1、2 行分別給出甲、乙的勝、平、負(fù)次數(shù),數(shù)字間以 1 個(gè)空格分隔。第 3 行給出兩個(gè)字母,分別代表甲、乙獲勝次數(shù)最多的手勢(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
這題有問題,只有測(cè)試點(diǎn)2是正確的,其他都錯(cuò)了,沒有找出來錯(cuò)在哪里,覺得邏輯完全沒問題(苦笑.jpg)先放一放,以后再看
#include<stdio.h>
int Judge(char a,char b);
void JudgeMax(int j,int c,int b);
int jc,jb,jj,yc,yb,yj;
int Judge(char a, char b)
{
// flag: 0 平,1 甲勝,2 乙勝
// 甲 C J B
// 乙 C J B C J B C J B
// 0 1 2 2 0 1 1 2 0
int flag = 0;
if(a == 'C' && b == 'J')
{
flag = 1;
jc ;
}
if(a == 'J' && b == 'B')
{
flag = 1;
jj ;
}
if(a == 'B' && b == 'C')
{
flag = 1;
jb ;
}
if(a == 'C' && b == 'B')
{
flag = 2;
yb ;
}
if(a == 'J' && b == 'C')
{
flag = 2;
yc ;
}
if(a == 'B' && b == 'J')
{
flag = 2;
yj ;
}
return flag;
}
void JudgeMax(int j,int c,int b)
{
int max = b; //初始為B
//重復(fù)情況:
// b == c 或者 b == j或者 b == c == j:
// max 不變?nèi)詾閎,則輸出也是 B
// c == j > b: 先判斷第一個(gè)if,第二個(gè)if max不變?nèi)詾閏,輸出 C
if(c > max)
max = c;
if(j > max)
max = j;
// b - c - j 順序輸出
if(max == b)
printf("B");
else if(max == c)
printf("C");
else if(max == j)
printf("J");
}
int main()
{
int n;
scanf("%d",&n);
int i;
char a,b;
int js,jf,p;
int flag;
js = jf = p = 0;
jc = jb = jj = yc = yb = yj = 0;
for(i = 0; i < n; i )
{
fflush(stdin); //清除緩沖區(qū),去除回車、空格的影響
scanf("%c %c",&a,&b);
flag = Judge(a,b);
// 甲勝 = 已負(fù) 甲平 = 乙平 甲負(fù) = 乙勝
if(flag == 0)
p ;
if(flag == 1)
js ;
if(flag == 2)
jf ;
}
printf("%d %d %d\n",js,p,jf);
printf("%d %d %d\n",jf,p,js);
// printf("%d %d %d\n%d %d %d\n",jj,jc,jb,yj,yc,yb);
JudgeMax(jj,jc,jb);
printf(" ");
JudgeMax(yj,yc,jb);
}
來源:https://www./content-4-711101.html
|