uva 11489 博弈

#include<stdio.h>
#include<string.h>
int main()
{
    int T,len,ca=1;
    scanf("%d",&T);
    char a[10005];

    while(ca<=T)
    {
        scanf("%s",a);
        len=strlen(a);
        int cnt[3]={0,0,0};
        for(int i=0;i<len;i++)
        {
            int tp=a[i]-'0';
            cnt[tp%3]++;
        }
        printf("Case %d: ",ca++);
        int mo=(cnt[1]+cnt[2]*2)%3;
        if(mo)
        {
            if(cnt[mo]>0)//11111
            {
                if(cnt[0]&1) printf("T\n");
                else printf("S\n");
            }
            else
            {
                printf("T\n");
            }
        }
        else
        {
            if(cnt[0]&1) printf("S\n");
            else printf("T\n");
        }
    }
    return 0;
}


题意: 给出一段长度不超过1000位的数字, 两个人进行一场游戏, 分别从数字中去掉一个
    数字, 并且去掉之后, 剩下的数字的每一位数相加都是3的倍数, 最后不能取, 或
    是没有数字了, 就输了. 现在问题先手胜利的话就输出"S", 否则输出"T".


解题思路:
    1. 先统计全部位数对3求余剩下0,1,2的个数, 并且统计一开始全部位数的和.
       这是为了判断第一次先手的操作. 以后两人的操作只能去掉余数为0的数.
       那么直接判断操作次数的奇偶性即可.

你可能感兴趣的:(uva 11489 博弈)