蓝桥杯-取球游戏

   
    今盒子里有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]);
    }

}
相关文章
相关标签/搜索