/* 题目描述 今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。 我们约定: 每个人从盒子中取出的球的数目必须是:1,3,7或者8个。 轮到某一方取球时不能弃权! A先取球,然后双方交替取球,直到取完。 被迫拿到最后一个球的一方为负方(输方) 请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢? */ /*可以看出,当某个数要获胜,在其先抽之后剩下的那个数必输即可。 * 也就是n时,只要n-1,n-3,n-7和n-8只要有一个数字对于乙玩家来说是必输的, * 那么甲就是赢家,这就可以利用之前求到的。*/ #include <stdio.h> void caculate(int n); int a[10000] = {0, 1, 0, 1, 0, 1, 0, 1, 1}; int main() { int n; scanf("%d", &n); for (int i = 0; i < n; ++i) { int temp; scanf("%d",&temp); caculate(temp); } } void caculate(int n) { if (n <= 9) { printf("%d\n", a[n - 1]); } else { for (int i = 9; i < n; ++i) { a[i] = !(a[i - 1] & a[i - 3] & a[i - 7] & a[i - 8]); } printf("%d\n",a[n-1]); } }