可将一堆全取走,但不可不取,最后取完者为胜,求必胜的方法。
若sum=0;则先取者输,后取者胜;
若sum=!0,则先取者使其变成奇异状态,先取者胜
即谁先面临奇异状态谁输;
题目2:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根,
可将一堆全取走,但不可不取,最后取完者为负,求必胜的方法。
分为2种情况:1:每个堆数的火柴数量为1,若为奇数堆,先取者最后取完,则输;
若为偶数堆,后取则输
2、每个堆数的火柴数量不是1,若sum=0;则先取者输,后取者胜,
若sum=!0,先取者胜,后取者输
总结:谁先面临奇异状态谁输,不管哪种情况!
代码如下:
#include<stdio.h> int main() { int T,a[100],i,sum,m,ok; while(~scanf("%d",&T)) { while(T--) { sum=0; ok=0; scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d",&a[i]); if(a[i]>1) ok=1; sum=sum^a[i]; } if(ok==0) { if(m%2==0) printf("John\n"); else printf("Brother\n"); } else if(sum==0) printf("Brother\n"); else printf("John\n"); } } return 0; }
原文地址:http://blog.csdn.net/lihaogegehuting/article/details/38198237