Integer Game(UVA11489)3的倍数

K - Integer Game

Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu

 

 

 

 

题意:在n中取数字,使剩下的数是3的倍数,不能取则失败。

思路:如果能使当前数为3的倍数,数字和必是3的倍数。要保持这种状态,先对每一位对3取余,统计cnt[0],cnt[1],cnt[2]; 的个数,整个串能否被3整除取决于ans=(cnt[1]+cnt[2]*2)%3;分情况讨论,如果能整除,则,判断cnt[0]的个数,如果是偶数个则T,否则S;如果不能整除,则,要特判cnt[ans]的个数是否大于0;<eg:11111>;大于0,则cnt[0]的个数为偶数个则S,否则T;等于0则T;

一直坑在11111这种情况!o(︶︿︶)o 唉

转载请注明出处:寻找&星空の孩子

 

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     int T,len,ca=1;
 6     scanf("%d",&T);
 7     char a[10005];
 8 
 9     while(ca<=T)
10     {
11         scanf("%s",a);
12         len=strlen(a);
13         int cnt[3]={0,0,0};
14         for(int i=0;i<len;i++)
15         {
16             int tp=a[i]-'0';
17             cnt[tp%3]++;
18         }
19         printf("Case %d: ",ca++);
20         int mo=(cnt[1]+cnt[2]*2)%3;
21         if(mo)
22         {
23             if(cnt[mo]>0)//11111
24             {
25                 if(cnt[0]&1) printf("T\n");
26                 else printf("S\n");
27             }
28             else
29             {
30                 printf("T\n");
31             }
32         }
33         else
34         {
35             if(cnt[0]&1) printf("S\n");
36             else printf("T\n");
37         }
38     }
39     return 0;
40 }

 

posted @ 2015-06-10 21:10  寻找&星空の孩子  阅读(699)  评论(0编辑  收藏  举报