最近和朋友被一个问题整死了

问题是:有N(N=20)个人围成一圈做游戏,规则如下:从某一个人开始报数,依次报1,2,3,喊到3的人出局。下一个人接着从1开始报数,直到最后只剩下一个人。问最后剩下的是谁?

我们一开始想:状态的判断:转化为零和一,被淘汰的是1,还在的是0.

然后

length=int(input('请输入有多少人玩:'))all=[]
for i in range(length):all.append(0)#生成序列,并设定未出局为0
allcount=0
if length<=3:allcount=lengthprint('参与人数不得少于三!!')
count=0
onecount=0#计算有多少人被淘汰
while onecount<length:for i in range(length):if all[i]==0:#侦测报数人数count+=1elif count==3:#错误做法,判断应该是串线而不是并线count=0#并线的话只会三选一onecount+=1all[i]=1#把被淘汰的设为一elif onecount==length:result=i#求出最后是谁break

结果就死循环了,菜鸡一个。

然后我就逐个段落检查发现第二个判断应该是串线而不是并线,并线会三选一

然后我们就改出来了:

length=int(input('请输入有多少人玩:'))all=[]
for i in range(length):all.append(0)#生成序列,并设定未出局为0
allcount=0
if length<=3:allcount=lengthprint('参与人数不得少于三!!')
count=0
onecount=0#计算有多少人被淘汰
while onecount<length:for i in range(length):if all[i]==0:#侦测报数人数count+=1if count==3:count=0onecount+=1all[i]=1#把被淘汰的设为一if onecount==length-1:#求出最后是谁break
position=all.index(0)
print(all)
print(position+1)

答案就出来了,剩下最后一个人

在查资料的过程中还发现一个大佬的方法:比我的简洁但他没加注释,我加个注释:

def AList(alist):n = int(input("The number of person:"))#输入总共有多少人k = int(input("The k set:"))#k为间隔多少人报一次到alist = []for i in range(1,n+1):#返回一个序列[1,2,3,……,n],是另一种表示人数的方式alist.append(i)#由于数字本身自带大小,所以最后剩下的那个数字直接返回print(alist)j = 1i = 1while n>1:j = j+k-1if j>n:#报到超过最后一个人j = j%n#取余数,得出从头开始第几个人报道i = i+1del alist[j-1]#删掉报道的人n = n-1#由于人被删掉了,人群总数就减一alist = ','.join(str(i) for i in alist)return alist
print('The final number left is:',format(AList([0])))

附上原文链接:(用函数解决)Python报数游戏,输入有n个人按顺序编号,从第一个人报数,输入报数k,从1到k,报到k的退出游戏,从下一个人继续游戏,并求最后剩下的人编号是几号。

刚刚学Python,写给自己看,debug的过程就像坐牢,不过结果还好

Python报数游戏的另一种思路相关推荐

  1. python——报数游戏

    报数游戏 模拟报数游戏.有n个人围成一圈,顺序编号,从第一个人开始从1到k(假设k=3)报数, 报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号. 思路 代码 &quo ...

  2. Python中断多重循环的几种思路

    转自: https://www.cnblogs.com/cuijianxin/p/6611751.html I. 跳出单循环 不管是什么编程语言,都有可能会有跳出循环的需求,比如枚举时,找到一个满足条 ...

  3. Python中断多重循环的两种思路

    1. 跳出单循环 不管是什么编程语言,都有可能会有跳出循环的需求,比如枚举时,找到一个满足条件的数就终止.跳出单循环是很简单的,比如 for i in range(10):if i > 5:pr ...

  4. (用函数解决)Python报数游戏,输入有n个人按顺序编号,从第一个人报数,输入报数k,从1到k,报到k的退出游戏,从下一个人继续游戏,并求最后剩下的人编号是几号。

    Python例题:有n个人围成一个圈,按照顺序给他们编号(1~n).从第一个人开始,报告从1到k的数字(假设k=3).报数为k的人退出圆圈,然后圆圈缩小,从下一个人开始继续游戏,游戏淘汰剩下一人的时候 ...

  5. 【python】并行化的又一种思路

    https://segmentfault.com/a/1190000000414339 转载于:https://www.cnblogs.com/colipso/p/7197449.html

  6. python做游戏用什么库_Python库之游戏开发及虚拟现实

    Python库之游戏开发及虚拟现实 发布时间:2019-04-06 20:47, 浏览次数:320 , 标签: Python <>1.PyGame:简单的游戏开发功能库 http://ww ...

  7. python开发游戏教程_Python开发星际游戏实例教程

    这篇文章主要为大家详细介绍了Python外星人入侵游戏编程完整的实现思路,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PYTHON游戏编程外星人入侵的完整实现思路,具体内容如下 准备工作:下载p ...

  8. 炸金花游戏(5)--动态收敛预期胜率的一种思路

    前言: 前面几篇炸金花的文章, 里面涉及到了一个核心问题, 就是如何实现对手的牌力提升, 以及胜率的动态调整. 这个问题是EV模型, 以及基准AI里最重要的核心概念之一. 本文将尝试实现一个版本, 望 ...

  9. python模拟报数游戏

    题目:编写程序,模拟报数游戏.有n个人围成一圈,顺序编号,从第一个人开始从1到k(假设k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号. 思路: 初步实现 ...

最新文章

  1. java-第十一章-类的无参方法-计算器运算
  2. Java设计模式(代理模式-模板方法模式-命令模式)
  3. vue 巧用过渡效果
  4. oracle同时更新多列数据,ORACLE 11G 表联合更新多列
  5. MonogoDb学习笔记
  6. sqoop操作之Oracle导入到HDFS
  7. IDEA图形化操作git
  8. 虚拟机ping不通主机与外网的解决方法
  9. Zedgraph 总结
  10. 220421-一些电平转换电路
  11. 计算机名加符号,最新带符号的网名
  12. 关于SEO优化的建议
  13. java项目如何做成可以在没有jdk环境的电脑上面运行的exe程序
  14. 劝告所有人,特别是中年人,不要轻易离职
  15. SpringBoot学习-Day1
  16. protoc did not exit cleanly
  17. elk面试题_ELK 原理 使用 面试
  18. MarkDown-符号大全
  19. 关于我所上传资源的相关问题
  20. WSN(3)(1):第三章  无线传感网络的通信与组网

热门文章

  1. 利用Open 3D建立三维模型
  2. HC/LS/HCT/F系列芯片的区别(转)
  3. log4j(一)——什么是Log4j以及Log4j的体系结构
  4. 征战三国html5源码,征战三国单机版
  5. 【报告分享】2021中国锂电行业发展-德勤(附下载)
  6. Mac上编译Linux内核时找不到ncurses
  7. 1-occ data exchange (read iges_step)
  8. matlab unwrap angle,matlab之unwrap函数
  9. C#发送ZPL指令到打印机
  10. Unity 实现鼠标双击