问题:

        15个人围成圈数数  每逢报数为七的倍数就退出,一直循环下去 ,
直到剩下最后一人 ,最后剩余的是第几个人,展示出退出的顺序。

代码:

PS:如果代码有哪里不理解可以看下面的分析,如果能理解,就不用浪费时间看下面的分析了

peo_num = 15
a = []
for i in range(peo_num):a.append(i+1)
# 被删除的元素
be_del = []
# 报数
num = 0
# 列表大于一个就循环
while len(a) >1:# 由于删除 元素后,索引会变,change_index 为索引改变的值change_index =0# 循环a列表for i in range(len(a)):# 报数num += 1# 如果num 为 7 的倍数if num % 7 == 0:# 删除元素,并添加到be_del 列表be_del.append(a.pop(i - change_index))# 由于删除了一个元素,本次循环的列表的索引就改变了1change_index += 1# 删除完元素。清除 change_indexchange_index = 0print('最后剩下的人:',a)
print('退出的顺序::',be_del)

需求:

  • 1,求出,最后剩下的那个人
  • 2,退出的顺序

思路

首先,我们要15个人列出来,很显然,这应该用集合表示,根据题目,报数为7的倍数的,退出(退出的还要进行排序),这个集合要支持删除元素,我在这里就用两个列表了。

这道题的逻辑很简单,就是吧报数为 7 的倍数的元素的删除,并追加到一个新的列表中。

根据题目,15个人围成一圈,在人数发生改变的时候,但是报数不会重新开始,很显然,一个循环满足不了我们的需求,所以,我要用到两个循环,循环里面嵌套一个循环。外部的循环在人数大于1(即列表的长度大于1)的时候,报数不结束,内部的循环就是每个报数。在内部循环,进行判断,如果这个人的报数为7的倍数,则从列表中去除他,并且追加到一个新列表。

到这里,我们就可以开始代码,根据思路,我们可以写出下面的代码

peo_num = 15
a = []
for i in range(peo_num):a.append(i+1)
# 报数
num = 0
# 退出的列表
be_del  =  []
# 列表大于一个就循环
while len(a) >1:# 循环a列表for i in range(len(a)):# 报数num += 1# 如果num 为 7 的倍数if num % 7 == 0:# 删除元素,并添加到be_del 列表be_del.append(a.pop(i))
print('最后剩下的人:', a)
print('退出的顺序:', be_del)

运行结果:

 ...be_del.append(a.pop(i))
IndexError: pop index out of range

这里说我们删除的时候,索引超出了列表的长度,这里就会有人有疑问,
我们是根据列表的的索引来删除的,怎么会超出范围的。其实,这个问题简单,就是我在此之前删除了一个元素,列表的长度也会对应发生改变,但是在这个循环中 i 还是列表没有发生改变前的索引,当 i 是列表未改变的最大索引,当我们根据 i 去删除 改变后的列表对应的值的时候,就发现列表的长度不够,也就是,索引超出了列表的长度

那么这个问题怎么解决呢?
很简单,列表既然发生了变化,那么我们就把这个变化记下来,等下次列表发生变化的时候,这个变化给 i


peo_num = 15
a = []
for i in range(peo_num):a.append(i+1)
# 被删除的元素
be_del = []
# 报数
num = 0
# 列表大于一个就循环
while len(a) >1:# 由于删除 元素后,索引会变,change_index 为索引改变的值change_index =0# 循环a列表for i in range(len(a)):# 报数num += 1# 如果num 为 7 的倍数if num % 7 == 0:# 删除元素,并添加到be_del 列表be_del.append(a.pop(i - change_index))# 由于删除了一个元素,本次循环的列表的索引就改变了1change_index += 1# 删除完元素。清除 change_indexchange_index = 0print('最后剩下的人:',a)
print('退出的顺序::',be_del)

结果:

最后剩下的人: [5]
退出的顺序:: [7, 14, 6, 15, 9, 3, 13, 11, 10, 12, 2, 8, 1, 4]

面试题:15个人围成圈数数 每逢报数为七的倍数就退出,一直循环下去 ,直到剩下最后一人 ,最后剩余的是第几个人,展示出退出的顺序相关推荐

  1. 出圈问题(java)-----n个人围成一圈,数到key或者key的倍数,出圈,问剩下的最后一个人原来的位置是多少?

    出圈问题---n个人围成一圈,数到key或者key的倍数,出圈,问剩下的最后一个人原来的位置是多少? java版 1.n个人围成一圈,说明它是重复循环的,头就是尾. 2.每次数key或者key的倍数, ...

  2. 约瑟夫环 有15个人围成一圈,按顺序淘汰

    题目: 15个人围成一圈报数,顺序从1到15编号. 从第一个人开始报数,凡报到n的人退出圈子. 输出最后留在圈子里的人的编号. 做题的时候写到了这道题,尝试着用数组实现了一下.全程没有借助链表和指针. ...

  3. python数圈算法_Python实践|围圈数数多人运动

    题目 有n个人围成一圈,顺序排号.从第一个人开始报数(从1 到3报数),凡报到3的人退出圈子,问最后留下的是原来 第几号的那位. def main(): n = int(input("输入人 ...

  4. 题目98-3:围成一圈数三报数且出列——假设有10个人围成一圈,从1开始报数,数到3的人,让他出列,下一个人重新从1开始报数,数到3的人,让他出列……以此类推,把依次出列的9个人的编号打印出来

    题目转载:http://python.wzms.com/s/1/103 题目描述: n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再 ...

  5. 两条曲线所围成的面积_人教版数学六年级上册 5.3:圆的面积(一) 微课视频|知识点|课件解析|同步练习...

    [教学微课堂] [知识点] 一.圆的认识 1.日常生活中的圆 2.画图.感知圆的基本特征 (1)实物画图 (2)系绳画图 3.对比,感知圆的特征:我们以前学过的长方形.正方形.平行四边形.梯形.三角形 ...

  6. Java面试题15牛客 以下关于Integer与int的区别错误的是

    Java面试题15牛客 以下关于Integer与int的区别错误的是 A int是java提供的8种原始数据类型之一 B Integer是java为int提供的封装类 C int的默认值为0 D In ...

  7. ybt1359: 围成面积

    1359:围成面积 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6090 通过数: 2797 [题目描述] 编程计算由"*"号围成的下列图形的面积.面积计算 ...

  8. [剑指offer]面试题15:链表中倒数第k个结点

    面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...

  9. 第十一届蓝桥杯省赛 C++组试题 第2题 求完数

    /* 第十一届蓝桥杯省赛C++组试题精讲第2题 求完数因子:因子也叫因数,例如3×5=15,那么3和5是15的因子. 同时15×1=15,那么1和15也是15的因子. 1,3,5,15 这四个因子是1 ...

最新文章

  1. Struts2学习8--文件上传(单个文件上传)
  2. 在AWS第1部分中使用Terraform自动缩放组:基本步骤
  3. 【java】java 8 的一些集合操作
  4. MySql access denied for user错误
  5. 什么是lambda(函数)?
  6. 【数据库】MySql分割字符串
  7. 量子纠缠 计算机,计算机科学家利用量子纠缠系统,证实44年前的一个猜想是错误的...
  8. 质量流量计测量液体与气体介绍
  9. 操作系统之文件管理系统
  10. 使用Word Embedding构造简洁有效的文本摘要系统
  11. 树莓派 linux hook,树莓派制造日视/夜视串流直播摄像头
  12. matlab修改图例/图注/legend中线条的粗细
  13. my ReadTravel_ Choson / Tailand Racha Island / Phuket Island / Malaysia
  14. 利用python进行数据分析数据集_《利用Python进行数据分析》终章·数据分析案例·学习笔记(二)...
  15. 两个电脑文件如何同步
  16. 利用jieba分词分析小说二
  17. 终于等到你,FATE v1.6已更新,五大模块迎来巨幅优化!
  18. 数据库系统基础教程第三版 部分实验命令
  19. 时间管理---规律你的生活
  20. Sweet Home 3D for Mac(3D室内装潢设计软件)

热门文章

  1. 中国城市轨道交通行业运营建议及投资机会评估报告2021-2027年版
  2. Java学习论坛,程序员 yyds
  3. 梦幻西游三维获取服务器信息,《梦幻西游三维版》2020服务器互通功能说明
  4. x200 vistar系统硬盘安装ubuntu9.10
  5. 如何把多张照片合成一张,这些方法好用也好学
  6. Codeforces加速访问及其他编程比赛平台推荐
  7. 德州主池和边池的计算
  8. 传输层中UDP的深入理解以及socket中UDP的使用
  9. java输入字母_JAVA如何把输入中文输出汉语拼音字母的原理与代码
  10. 小米用户画像_2019中国智能手机用户画像:男性选小米,女性选OV