/* 題目描述 今盒子里有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]); } }