这里要注意的是:
scanf函数在输入字符串或者字符时是不会忽略空格和回车的,它会把这个也当作字符一块赋值到char型变量中。
所以一定要看好输入格式,然后在scanf中写好相应的空格,就像这样scanf("%d ",&n);
这里%d后的空格既可以匹配空格也可以匹配回车换行,所以只有这样写,才会为变量正确的赋值。
代码如下:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
int isWin(char x,char y)
{
if(x==y)
{
return 0;
}
if(x=='C')
{
// printf("锤子来了\n");
if(y=='J')return 1;
else return -1;
}
if(x=='J')
{
if(y=='B')return 1;
else return -1;
}
if(x=='B')
{
if(y=='C')return 1;
else return -1;
}
return 99;
}
int getMaxIndex(vector<char> vic)
{
int win[3]={0};char youxi[3]={'C','J','B'};
for(vector<char>::iterator it=vic.begin();it!=vic.end();it++)
{
if((*it)=='C')
{
win[0]++;
}
if((*it)=='J')
{
win[1]++;
}
if((*it)=='B')
{
win[2]++;
}
}
int maxIndex=0;
for(int i=1;i<3;i++)
{
if(win[maxIndex]==win[i])
{
if(youxi[maxIndex]>youxi[i])
{
maxIndex=i;
}
}else
{
if(win[maxIndex]<win[i])
{
maxIndex=i;
}
}
}
return maxIndex;
}
int main()
{
int n;
scanf("%d ",&n);
int x_vic=0,x_fail=0,x_draw=0;
char youxi[3]={'C','J','B'};
vector<char> vic[2];
char x,y;
for(int i=0;i<n;i++)
{
scanf("%c %c",&x,&y);
int result=isWin(x,y);
if(result==0)
x_draw++;
if(result==1)
{
x_vic++;
// printf("正常情况\n");
vic[0].push_back(x);
}
if(result==-1)
{
x_fail++;
vic[1].push_back(y);
}
if(i!=n-1)
{
scanf(" ");
}
}
//printf("这是x :%c\n这是y :%c\n",x,y);
printf("%d %d %d\n",x_vic,x_draw,x_fail);
printf("%d %d %d\n",x_fail,x_draw,x_vic);
int x_win=getMaxIndex(vic[0]);
int y_win=getMaxIndex(vic[1]);
printf("%c %c",youxi[x_win],youxi[y_win]);
}