PATDay3记录

B1018锤子剪刀布

在这里插入图片描述

题目分析

1、将字母转化为数字进行比较,这里按照字典序刚好可以实现
2、注意字符输入scanf会吸收回车,因此可以在每一次循环的scanf前加一个getchar()将回车吸收掉。否则格式错误
3、这里需要分析共九种胜负情况,实际上是成对出现,甲输乙赢。因此主要判断三种情况,甲胜== 乙败 ,平 , 甲败 ==乙胜。
4、最后还需要统计三种胜利的最大那个,考虑字典序,可以用一个数组来存储三种手势胜利的次数,然后返回最大的。同等情况返回字典序小的。

AC代码

#include<cstdio>
using namespace std;
int convert(char a)
{
    if(a=='B') return 1;
    if(a=='C') return 2;
    if(a=='J') return 3;
}
char max_ges(int a[],int n)
{
    int temp=0;
    for(int i=1;i<n;i++)
    {
        temp=a[temp]>=a[i]?temp:i;
    }
    if(temp==0) return 'B';
    if(temp==1) return 'C';
    if(temp==2) return 'J';
}
int main()
{
    int A[3]={0};
    int B[3]={0};
    int A_win[3]={0};
    int B_win[3]={0};
    int N;
    scanf("%d",&N);
    while(N--)
    {
        char a1,a2;
        int b1,b2;
        getchar();
        scanf("%c %c",&a1,&a2);
        b1=convert(a1);
        b2=convert(a2);
        if((b1+1)%3==b2||b1+1==b2)
        {
            A[0]++;
            B[2]++;
            A_win[b1-1]++;
        }
        else if(b1==b2)
        {
            A[1]++;
            B[1]++;
        }
        else
        {
            A[2]++;
            B[0]++;
            B_win[b2-1]++;
        }
    }
    char c1,c2;
    c1=max_ges(A_win,3);
    c2=max_ges(B_win,3);
    printf("%d %d %d\n",A[0],A[1],A[2]);
    printf("%d %d %d\n",B[0],B[1],B[2]);
    printf("%c %c",c1,c2);
    
    
}

写的不是特别好,优化的点:
1、考虑将字符转化为数字时下标为0,1,2可以减少一个比较判断条件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值