今盒子里有n個小球,A、B兩人輪流從盒中取球,每個人都可以看到另一個人取了多少個


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM