这个题目好玩,知道推算方法了以后,刚做完之前那个题,然后我就果断打表!MLE!然后我就输出了20*20的情况找找规律吧,我发现当n,m中只要有一个为偶数的时候先手就会赢。下面附上2段代码。
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 //这个是打表出来的20*20的值。n是行号,m是列号。 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
打表代码
1 #include <stdio.h> 2 bool gird[2000+10][2000+10];//1代表必胜点 0代表必败点 3 int main() 4 { 5 int i,j; 6 int n,m; 7 gird[2000][1]=0; 8 for(i=2000;i>0;--i) 9 { 10 for(j=1;j<=2000;++j) 11 { 12 gird[i][j]=0; 13 if( (gird[i+1][j]==0&&i+1<=2000) || (gird[i][j-1]==0&&j-1>=1) ||(gird[i+1][j-1]==0&&i+1<=2000&&j-1>=1) ) 14 gird[i][j]=1; 15 } 16 } 17 /* while(scanf("%d%d",&n,&m)&&(n!=0||m!=0)) 18 { 19 n=2000-n+1; 20 if(gird[n][m]==1) 21 printf("Wonderful!\n"); 22 else 23 printf("What a pity!\n"); 24 25 } 26 */ 27 for(i=1;i<=20;++i) 28 for(j=1;j<=20;++j) 29 { 30 i=2000-i+1; 31 printf("%d ",gird[i][j]); 32 if(j==20) 33 printf("\n"); 34 } 35 36 return 0; 37 }
然后提交代码
1 #include <stdio.h> 2 int main() 3 { 4 int a,b; 5 while(scanf("%d%d",&a,&b)&&(a!=0||b!=0)) 6 { 7 if(a%2==0||b%2==0) 8 printf("Wonderful!\n"); 9 else 10 printf("What a pity!\n"); 11 } 12 return 0; 13 }