PAT B1018 锤子剪刀布

这里要注意的是:

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]);


}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值