这道题如果用N-position、P-position来做很简单。
但是为了加深对sg函数的理解,又用sg敲了一遍:
#include <bits/stdc++.h>
using namespace std;
int arr[15],sg[1005];
int getsg(int x)
{
int visit[1005];//起初 wa了一次是因为将visit数组放在外面了
//这样在下面多次运用getsg()时会将其清零,导致前面的数据没保存住。
memset(visit,0,sizeof(visit));
for(int i=0;arr[i]<=x;i++)
{
if(sg[x-arr[i]]==-1)
getsg(x-arr[i]);
visit[sg[x-arr[i]]]=1;
}
for(int j=0;;j++)
{
if(!visit[j])
{
sg[x]=j;
break;
}
}
return sg[x];
}
int main()
{
memset(sg,-1,sizeof(sg));
int m;
arr[0]=1;
for(int i=1;i<15;i++)
arr[i]=arr[i-1]*2;
while(cin>>m)
{
if(getsg(m)==0)
cout<<"Cici"<<endl;
else cout<<"Kiki"<<endl;
}
return 0;
}