Python报数游戏的另一种思路
最近和朋友被一个问题整死了
问题是:有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报数游戏的另一种思路相关推荐
- python——报数游戏
报数游戏 模拟报数游戏.有n个人围成一圈,顺序编号,从第一个人开始从1到k(假设k=3)报数, 报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号. 思路 代码 &quo ...
- Python中断多重循环的几种思路
转自: https://www.cnblogs.com/cuijianxin/p/6611751.html I. 跳出单循环 不管是什么编程语言,都有可能会有跳出循环的需求,比如枚举时,找到一个满足条 ...
- Python中断多重循环的两种思路
1. 跳出单循环 不管是什么编程语言,都有可能会有跳出循环的需求,比如枚举时,找到一个满足条件的数就终止.跳出单循环是很简单的,比如 for i in range(10):if i > 5:pr ...
- (用函数解决)Python报数游戏,输入有n个人按顺序编号,从第一个人报数,输入报数k,从1到k,报到k的退出游戏,从下一个人继续游戏,并求最后剩下的人编号是几号。
Python例题:有n个人围成一个圈,按照顺序给他们编号(1~n).从第一个人开始,报告从1到k的数字(假设k=3).报数为k的人退出圆圈,然后圆圈缩小,从下一个人开始继续游戏,游戏淘汰剩下一人的时候 ...
- 【python】并行化的又一种思路
https://segmentfault.com/a/1190000000414339 转载于:https://www.cnblogs.com/colipso/p/7197449.html
- python做游戏用什么库_Python库之游戏开发及虚拟现实
Python库之游戏开发及虚拟现实 发布时间:2019-04-06 20:47, 浏览次数:320 , 标签: Python <>1.PyGame:简单的游戏开发功能库 http://ww ...
- python开发游戏教程_Python开发星际游戏实例教程
这篇文章主要为大家详细介绍了Python外星人入侵游戏编程完整的实现思路,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PYTHON游戏编程外星人入侵的完整实现思路,具体内容如下 准备工作:下载p ...
- 炸金花游戏(5)--动态收敛预期胜率的一种思路
前言: 前面几篇炸金花的文章, 里面涉及到了一个核心问题, 就是如何实现对手的牌力提升, 以及胜率的动态调整. 这个问题是EV模型, 以及基准AI里最重要的核心概念之一. 本文将尝试实现一个版本, 望 ...
- python模拟报数游戏
题目:编写程序,模拟报数游戏.有n个人围成一圈,顺序编号,从第一个人开始从1到k(假设k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号. 思路: 初步实现 ...
最新文章
- java-第十一章-类的无参方法-计算器运算
- Java设计模式(代理模式-模板方法模式-命令模式)
- vue 巧用过渡效果
- oracle同时更新多列数据,ORACLE 11G 表联合更新多列
- MonogoDb学习笔记
- sqoop操作之Oracle导入到HDFS
- IDEA图形化操作git
- 虚拟机ping不通主机与外网的解决方法
- Zedgraph 总结
- 220421-一些电平转换电路
- 计算机名加符号,最新带符号的网名
- 关于SEO优化的建议
- java项目如何做成可以在没有jdk环境的电脑上面运行的exe程序
- 劝告所有人,特别是中年人,不要轻易离职
- SpringBoot学习-Day1
- protoc did not exit cleanly
- elk面试题_ELK 原理 使用 面试
- MarkDown-符号大全
- 关于我所上传资源的相关问题
- WSN(3)(1):第三章 无线传感网络的通信与组网
热门文章
- 利用Open 3D建立三维模型
- HC/LS/HCT/F系列芯片的区别(转)
- log4j(一)——什么是Log4j以及Log4j的体系结构
- 征战三国html5源码,征战三国单机版
- 【报告分享】2021中国锂电行业发展-德勤(附下载)
- Mac上编译Linux内核时找不到ncurses
- 1-occ data exchange (read iges_step)
- matlab unwrap angle,matlab之unwrap函数
- C#发送ZPL指令到打印机
- Unity 实现鼠标双击