实例:
分析:1张牌,先抓胜。
2张牌,先抓胜。
3张牌,后抓胜。
4张牌,先抓胜。
5张牌,分析:先抓的人第一次不能让自己胜,那尽量使剩下的牌数 得到的结果一定是后抓胜,如果不能,则说明结果是后抓胜。剩下3张牌的结果是后抓胜,所以先抓的人先抓2张,这样自己一定保证胜。
5张牌,先抓胜。
6张牌,分析能否抓一次使得剩下的牌数一定是后抓胜,没有,故后抓胜。
7张牌,先抓胜
……
n张牌,遍历2的0,1,2,3~k次方,(2的k次方<=n),判断(n-2的 i 次方)能否得到后抓胜,能则说明先抓胜,否则后抓胜
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int A[1001],n,i,j;
A[1]=A[2]=0;
A[3]=1;
A[4]=0;
for(i=5;i<=1000;i++)
{
for(j=0;pow(2,j)<=i;j++)
{
if(A[i-int(pow(2,j))]==1||pow(2,j)==i) {A[i]=0;break;}
}
if(pow(2,j)>i) A[i]=1;
}
while(cin>>n)
{
if(A[n]==1) cout<<"Cici"<<endl;
else cout<<"Kiki"<<endl;
}
return 0;
}