toj 1180 Stone Game

http://acm.timus.ru/problem.aspx?space=1&num=1180

简单推理博弈。观察每次要取的个数,1,2,4,8,16...,对3的余数分别为1,2,1,2,1...,也就是说,没有可能只用一次操作从一个3的倍数达到另一个3的倍数。

当n=3时,显然先手必胜,那么先手只要在第一次操作上使剩余石子个数为3的倍数即可。这里先手必败的情况只有一种,即n%3==0。

如何求n%3?一个貌似初中或小学就学过的但是大多数人都忘记的东西:对一个数的每一位累加,结果对3的余数与n对3的余数相同。

code:

#include<cstdio>
int main(){
     char c ;
     int sum =  0 ;
     while(~scanf( " %c ", &c)&&c!= ' \n ')    sum += c ;
    sum %=  3 ;
     if(sum) printf( " 1\n%d\n ", sum) ;
     else    printf( " 2\n ") ;
     return  0 ;}

你可能感兴趣的:(game)