石头剪子布

石头剪子布

时间限制: 1 Sec   内存限制: 128 MB

题目描述

现在有两个人在玩石头剪子布游戏,请你判断最后谁赢了。
用R代表石头,S代表剪子,P代表布。

输入

输入的第一行是一个整数t(0<t<1000),表示测试样例的数目。
每组输入样例的第一行是一个整数n(0<n<100),表示游戏次数。
接下来n行,每行由两个字母组成,两个字母之间用一个空格分隔,这些字母只会是R,S或P。
第一个字母表示Player1的选择,第二个字母表示Player2的选择。

输出

对于每组输入样例,输出获胜方的名字(Player1或Player2),如果平均,则输出TIE。

样例输入

3
2
R P
S R
3
P P
R S
S R
1
P R

样例输出

Player 2
TIE
Player 1


题目不难,但有点坑,用scanf会超时,而cin不会。

代码如下

#include<iostream>
using namespace std;
int main()
{
    int t;
    cin>>t;
    //scanf("%d",&t);
    while(t--)
    {
        int n;
        cin>>n;
        //scanf("%d",&n);
        int x=0;//计分用,如果第一个人赢就加一分,输就减一分,相同就不加不减
        char c1,c2,u,v;
        while(n--)
        {
            cin>>c1>>c2;

            //scanf("%c%c%c%c",&u,&c1,&v,&c2);这里如果是用scanf就会超时,虽然我并不知道为什么。

//u用来读取上次输入完时键盘输入的换行符,c1是第一个人出的,v是用来读取中间的空格,c2是第二个人的

            /*int w=c1-c2;
            if(w==0)continue;
            if(w==1||w==2||w==-3)x--;

            else x++;*/

//用if判断或者用switch都是可以的

            switch(c1-c2)
            {
                case 1:x--;break;//如果c1和c2的ASCII码相减为1,说明c1是R,c2是P,此时第一个人输
                case 2:x--;break;
                case 3:x++;break;
                case -1:x++;break;
                case -2:x++;break;
                case -3:x--;break;
                case 0:break;
            }
        }
        if(x>0)
        cout<<"Player 1\n";
        //printf("Player 1\n");
        else if(x<0)
        cout<<"Player 2\n";
        //printf("Player 2\n");
        else
        cout<<"TIE\n";
        //printf("TIE\n");
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_41529799/article/details/80072086