ブルーブリッジカップ-ボール取りゲーム

1673 ワード

今箱の中にn個の小さいボールがあって、A、Bの2人は順番に箱の中からボールを取って、すべての人はすべて別の人がどれだけ取ったかを見ることができて、箱の中でまだどれだけ残っているかを見ることができて、しかも2人はすべてとても聡明で、間違いの判断をすることはできません.    私たちの約束:        箱から取り出したボールの数は、1、3、7、または8個でなければなりません.    どちらかがボールを取る番になったら棄権できません!    Aは先にボールを取って、それから双方が交互にボールを取って、取り終わるまで.    最後のゴールを奪われた方がマイナス(負けた方)        双方とも判断ミスがない場合、特定の初期球数に対してAが勝つかどうかをプログラミングしてください.    プログラム実行時、標準入力から取得したデータのフォーマットは以下の通りです.    まず整数n(n<100)であり、次にn個の整数があることを示す.次いでn個の整数であり、各行(整数<10000)を占め、初期球数を表す.    プログラムはn行を出力し,Aの勝負状況(0,1)を示す.    例えば、ユーザ入力:4121018    プログラムの出力:0110    注意:    よく調整してください.あなたのプログラムは正しい結果を実行できる時だけ得点する機会があります!        評価に使用する入力データは、試験用紙に与えられたインスタンスデータとは異なる場合があります.
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]);
    }

}