#include <iostream>
using namespace std;
int main()
{
int i, j, h;
char n[300];
cin>>n;
h = strlen(n);
j = 0;
for (i=0; i<h; i++)
j = (j * 10 + (n[i] - '0')) % 3;
if (j == 0)
cout<<2<<endl;
else
cout<<1<<endl<<j<<endl;
}
首先写出前几个局面:
必胜:1,2,4,5,7,8,10,11...
必败:3,6,9,12,15...
猜想:n = 3*k时必败
证明:
k = 1时成立.
假设k = m时成立;
当k = m+1时,n =3*k+3
由于所取石子数必须时2的指数,所以n不可能导向一个3的倍数的局面,也就是n取出一定石子必定是必胜局面,所以n是必败局面,证毕.
注意:n的范围很大,要用大数取模,用字符串读入.