UVA 11489- Integer Game
2016-07-20 11:10
441 查看
题目链接
题目解析
题意
输入数据的组数t,每组数据包含一连串的数字,S先取T后取,使取后的数字之和为3的倍数(0也3的倍数),直到不能取算作输,输出赢的字符。思路
所有数字的和sum,对3取余的结果,等于每个数字对3取余的和再对3取余的结果。一:
启发于博客
每个数字对3取余结果为0,1,2的数量分别设为num,num1,num2。
总共有两种情况:
1、起初sum是3的倍数,要保证取后数字和为3的倍数,就只能取3的倍数(3,6,9……),若num为偶数T赢,否则S赢。
2、起初sum不是3的倍数,要么取余为1,要么取余为2,S取完后若是3的倍数,同理第一种情况继续分析,否则T赢。
sum对3取余为1又分为:
num1>0,所输入的字符串对3取余情况(1 0 0,1 0,1)
和num1=0,所输入的字符串对3取余情况(2 2 0,2 2)。
取余为2同理。
代码
#include<stdio.h> #include<string> #include<iostream> using namespace std; int main(){ int T,cas=1,sum,num,num1,num2; string s; scanf("%d",&T); while(T--){ cin>>s; sum=num=num1=num2=0;//初始化 int len=s.length();//求字符串长度 for(int i=0;i<len;i++){ int k=s[i]-'0'; sum+=k; if(k%3==0)//每个数字k对3取余并统计数量 num++; else if(k%3==1) num1++; else num2++; } if(sum%3==0){//分情况讨论所有数字和sum对3取余 if(num%2==0) printf("Case %d: T\n",cas++); else printf("Case %d: S\n",cas++); } else if(sum%3==1){ if(num1>0){ if(num%2==0) printf("Case %d: S\n",cas++); else printf("Case %d: T\n",cas++); } else printf("Case %d: T\n",cas++); } else{ if(num2>0){ if(num%2==0) printf("Case %d: S\n",cas++); else printf("Case %d: T\n",cas++); } else printf("Case %d: T\n",cas++); } } return 0; }
二:
思路同一,只是代码简化
代码
#include<stdio.h> #include<string.h> using namespace std; #define MAX 1005 char str[MAX]; int a[3]; int main(){ int T,cas=1; memset(a,0,sizeof(a)); scanf("%d",&T); while(T--){ scanf("%s",str); memset(a,0,sizeof(a)); int sum=0; int len=strlen(str);//字符串常量str第一个'\0'前的字符个数 for(int i=0;i<len;i++){ a[(str[i]-'0')%3]++;//str[i]存储一个数字字符,str[i]-'0'得到该数字的值 sum+=str[i]-'0'; } int flag=0; if(a[sum%3]){ flag=1; a[sum%3]--;//主要目的是将sum对3取余为0的个数-1,取余为1和2个数-1没影响 } if(flag) flag+=a[0]; printf("Case %d: %s\n",cas++,flag%2==1?"S":"T"); } return 0; }
相关文章推荐
- Android DrawerLayout抽屉效果
- 《Qt》part 3 Qt5.5.0窗口之间传值(一)
- 函数栈的小结
- 2016夏季练习——LCA
- Spark源码导读(二)——聊天窗口构造
- Spring整合Quartz实现定时任务调度
- Codeforces Round #363 (Div. 2) A、B、C
- Linux进程管理(四、 进程终结)
- 文件上传 数据对比
- ARM9 mini2451裸机学习——NAND flash驱动学习 1
- layer-list描绘单边描边实现分割线
- IOS开发 版本提醒
- 测试能不能加图片
- log4j配置详解
- java_静态方法能否被子类重写
- Win7(32&64)VS2013配置GDAL环境
- Array.map()
- 2016 Multi-University Training Contest 1 题解(慢慢补)
- Solr不同版本的下载地址
- 生成随机验证码函数