藍橋杯-取球遊戲

   
    今盒子裏有n個小球,A、B兩人輪流從盒中取球,每一個人均可以看到另外一我的取了多少個,也能夠看到盒中還剩下多少個,而且兩人都很聰明,不會作出錯誤的判斷。

    咱們約定:
    
    每一個人從盒子中取出的球的數目必須是:1,3,7或者8個。

    輪到某一方取球時不能棄權!

    A先取球,而後雙方交替取球,直到取完。

    被迫拿到最後一個球的一方爲負方(輸方)
    

    請編程肯定出在雙方都不判斷失誤的狀況下,對於特定的初始球數,A是否能贏?

    程序運行時,從標準輸入得到數據,其格式以下:

    先是一個整數n(n<100),表示接下來有n個整數。而後是n個整數,每一個佔一行(整數<10000),表示初始球數。

    程序則輸出n行,表示A的輸贏狀況(輸爲0,贏爲1)。

    例如,用戶輸入:



10
18

    則程序應該輸出:
0
1
1
0



    注意:

    請仔細調試!您的程序只有能運行出正確結果的時候纔有機會得分!
    
    在評卷時使用的輸入數據與試卷中給出的實例數據多是不一樣的。


java

import java.util.Scanner;


public class 取球遊戲 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] nums = new int[n];
        for(int i=0;i<n;i++){
            nums[i] = in.nextInt();
        }
        for(int i=0;i<n;i++){
            cal(nums[i]);
        }

    }
    
    public static void cal(int n){
        int[] v = new int[n+1];
        int[] m = {1,3,7,8};
        v[0] = 1;
        for(int i=1;i<=n;i++){
            boolean b=true;
            for(int j=0;j<4;j++){
                if(i>m[j]){
                    if(v[i-m[j]]==0){
                    v[i]=1;
                    b=false;
                    break;
                    }
                }else{
                    break;
                }
            }
            if(b)
                v[i]=0;
        }
        System.out.println(v[n]);
    }

}
相關文章
相關標籤/搜索