作业:拿球问题

题目:

今盒子里有 n个小球,A 、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,
也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。

我们约定:

每个人从盒子中取出的球的数目必须是: 1,3 ,7或者 8个。

轮到某一方取球时不能弃权!

A先取球,然后双方交替取球,直到取完。

被迫拿到最后一个球的一方为负方(输方)

请编程确定出在双方都不判断失误的情况下,对于特定的初始球数, A是否能赢?

输入

先是一个整数 n(n<100),表示接下来有n个整数。然后是 n个整数,每个占一行(整数 <10000),表示初始球数。

输出

输出 n行,表示A 的输赢情况(输为 0,赢为1 )。

样例输入

4
1
2
10
18

样例输出

0
1
1
0

 

 

分析:因为题目的数据时10000,所以可以先计算出1-10000个球的输赢情况

首先那第一个球的时候A的情况是输了记为false

第二个球的时候第一个拿球的人是true

第三个球的时候第一个拿球的人是无论是拿1个球,或是3个球,都是false

第四个球第一个拿球的人无论是拿1个球,或是3个球,都是true

第五个球第一个拿的人拿一个球的之后,还剩四个,再轮到第二个人拿,就变成了拿第四个球的结果了

接下来的情况就如上了

 

所以代码描述

public class Main {
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        boolean bo[] = new boolean[10000];
        //有一个的时候,A必输
        bo[1] = false;
        //两个
        bo[2] = true;
        bo[3] = false;
        bo[4] = true;
        bo[5] = false;
        bo[6] = true;
        bo[7] = false;
        bo[8] = true;
        int kena[] = {1,3,7,8};
        for(int i=9;i<10000;i++) {
            
            for(int j=0;j<4;j++) {
                if(bo[i-kena[j]]==false) {
                    bo[i] = true;
                    break;
                }
            }
        }
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int qiu[] = new int[n];
        for(int i=0;i<n;i++) {
            qiu[i] = sc.nextInt();
        }
        for(int i=0;i<n;i++) {
            int qiushu = qiu[i];
            if(bo[qiushu]) {
                System.out.println(1);
            }else {
                System.out.println(0);
            }
        }
    }
}
 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值