Python|猜球博弈

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

欢迎加入团队圈子!与作者面对面!直接点击!

问题描述

取球博弈

今盒子里有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

解决方案

注意‘两人都很聪明,不会做出错误的判断’这段话。

意思是当A和B面临选择时,如果他们的选择能使对方输(不管对方怎么选择,结果都是输),那么他们就一定会这样选择。

所以,这可能就是一个找规律的题型,在一定范围内具有某种规律,之后不停地重复这种规律。因为球数多了 A先选就会把情况变成之前的某一种情况。

我们试一试:

次数输赢(输 0  赢 1)

1   0

2   1

3   0

4  1

5   0

6   1

7   0

8   1

9   1

10  1

11  1

12  1

13  1

14  1

15  1

16  0

17  1

18  0

19  1

不难看出这是以15为一个循环的,1到8是输赢交替,9到15都是赢。接下来写代码便容易了很多。

编写代码:

n = int(input('多少个开始球数的情况:'))

l = list(i for i in range(n))

for i in range(n):

    l[i] = int(input())

def qiuqiu(m):

    mm = m % 15

    if mm > 7: print(1)

    else:

        if mm % 2 == 0: print(1)

        else: print(0)

for i in l:

    qiuqiu(i

END

实习编辑   |   王文星

责       编   |   周茂林

 where2go 团队


   

微信号:算法与编程之美          

长按识别二维码关注我们!

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

展开阅读全文
©️2020 CSDN 皮肤主题: 终极编程指南 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值