hdoj 1847 博弈

  这题范围是1-1000,可以用打表法写出来,满足2^n<=1000这个条件的n的取值是[0,9]。

  就简单了,只要在i-2^n的记录中找到必败点那么就可以认定i点是必胜点。

  然后打表输出就可以了。

 1 #include <stdio.h>
 2 bool num[1000+10];
 3 int main()
 4 {
 5     int n,i,j;
 6     num[0]=num[1]=1;//1代表赢 0代表输 (针对先手来说)
 7     int POWa[11]={0,1,2,4,8,16,32,64,128,256,512}; 
 8     for(i=2;i<=1000;++i) 
 9     {
10         num[i]=0;
11         for(j=1;j<=10;++j)
12         {
13             if(i<POWa[j]) break;
14             if(i==POWa[j])
15             {
16                 num[i]=1;
17                 break;
18             }
19             if(num[i-POWa[j]]==0) 
20             {
21                 num[i]=1;
22                 break;
23             }
24         }
25     }
26     while(scanf("%d",&n)!=EOF)
27     {
28         if(num[n]==1)
29             printf("Kiki\n");
30         else
31             printf("Cici\n");
32     }
33     return 0;
34 }
原文地址:https://www.cnblogs.com/symons1992/p/2849510.html