前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|猜球博弈

Python|猜球博弈

作者头像
算法与编程之美
发布2020-07-02 14:41:30
1K0
发布2020-07-02 14:41:30
举报
文章被收录于专栏:算法与编程之美

问题描述

取球博弈

今盒子里有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都是赢。接下来写代码便容易了很多。

编写代码:

代码语言:javascript
复制
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-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档