UVa 11489 整数游戏
2017-04-15 22:11
281 查看
https://vjudge.net/problem/UVA-11489
题意:
给出一个数字串n,两个人轮流从中取出一个数字,要求每次取完之后剩下的数是3的倍数,不能取数者输。
思路:
要想取掉一个数后总和还是的倍数,那么取掉的数必须得是3的倍数。
分两种情况:
①数字串总和为3的倍数,此时只需要看数字串中3的倍数的个数,奇数个的话先手赢,否则后手赢。
②数字串总和不为3,那么它会余1or余2,如果余1,那么查看数字串中是否存在%3后余1的数,如果有,则转化成了①情况,否则先手就输。(同理分析余2)
题意:
给出一个数字串n,两个人轮流从中取出一个数字,要求每次取完之后剩下的数是3的倍数,不能取数者输。
思路:
要想取掉一个数后总和还是的倍数,那么取掉的数必须得是3的倍数。
分两种情况:
①数字串总和为3的倍数,此时只需要看数字串中3的倍数的个数,奇数个的话先手赢,否则后手赢。
②数字串总和不为3,那么它会余1or余2,如果余1,那么查看数字串中是否存在%3后余1的数,如果有,则转化成了①情况,否则先手就输。(同理分析余2)
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<vector> #include<queue> #include<cmath> using namespace std; char s[1005]; int main() { int T; scanf("%d",&T); int kase=0; while(T--) { cin>>s; int sum=0; int num_0=0,num_1=0,num_2=0; int len=strlen(s); printf("Case %d: ",++kase); for(int i=0;i<len;i++) { if((s[i]-'0')%3==0) num_0++; else if((s[i]-'0')%3==1) num_1++; else if((s[i]-'0')%3==2) num_2++; sum+=s[i]-'0'; } if(sum%3==0) { if(num_0%2) printf("S\n"); else printf("T\n"); } else { if(sum%3==1) { if(num_1 && num_0%2==0) printf("S\n"); else printf("T\n"); } else if(sum%3==2) { if(num_2 && num_0%2==0) printf("S\n"); else printf("T\n"); } } } return 0; }
相关文章推荐
- UVa 11489 Integer Game (博弈&想法题)
- UVA 11489 搜索
- UVA - 11489 Integer Game
- Integer Game(UVA11489)3的倍数
- UVa 10891 Sum游戏
- UVa 489 刽子手游戏
- UVA 11489 Integer Game (博弈)
- uva 101木块游戏
- 猜数字游戏的提示 (Master-Mind Hints, UVa 340)
- BNU19907 UVA11489 Integer Game
- uva11489 - Integer Game(考思维,找规律)
- UVa 10935 卡片游戏
- uva 10253 Series-Parallel Networks (整数划分+多重集)
- uva 11582 - Colossal Fibonacci Numbers!(整数快速幂)
- uva 11384 正整数序列( Help is needed for Dexter)
- Uva 340 猜数字的游戏
- uva 1567 - A simple stone game(K倍动态减法游戏)
- UVA11384正整数序列(把123..变成0的最小步数)
- Integer Game(UVA 11489)
- [UVa 1610] 聚会游戏(Party Games)