Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >考点:程序逻辑和调试,类似环形链表结构【Python习题03】

考点:程序逻辑和调试,类似环形链表结构【Python习题03】

作者头像
刘金玉编程
发布于 2021-11-30 07:43:59
发布于 2021-11-30 07:43:59
36000
代码可运行
举报
文章被收录于专栏:编程创造城市编程创造城市
运行总次数:0
代码可运行

考点:

程序逻辑和调试,类似环形链表结构

题目:

有n个人围成一圈,顺序排号。

从第一个人开始报数(从1到3报数),

凡报到3的人退出圈子,

问最后留下的是原来第几号的那位。

假定有10个人手牵手绕成一圈,即n=10

程序效果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

移除报到3的人后 [1, 2, 4, 5, 6, 7, 8, 9, 10]

移除报到3的人后 [1, 2, 4, 5, 7, 8, 9, 10]

移除报到3的人后 [1, 2, 4, 5, 7, 8, 10]

移除报到3的人后 [1, 4, 5, 7, 8, 10]

移除报到3的人后 [1, 4, 5, 8, 10]

移除报到3的人后 [4, 5, 8, 10]

移除报到3的人后 [4, 5, 10]

移除报到3的人后 [4, 10]

移除报到3的人后 [4]

编写思路:

1.可以先用小的数值进行测试,让人数少点,然后看数据变化。

2.这里因为是n个人绕成一圈,所以计数的时候count的值要能够从头到尾、从尾到头都能连续计数。所以要将count设置为全局变量。

3.可以直接通过一个索引变量从list1中读取每一个数据,值得注意的是读到最后一个数据后要重置索引为0,这样可以形成环形结构读取。

4.使用if。。。else。。。语句来区分list1的索引是否读取到列表的末尾一个。

5.需要用到循环一直不停读取,直到最后一个人。

源代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""
@File文件    :   ljytest69
@Time创建时间    :    2021/11/23
@Author作者  :   刘金玉
@Contact联系方式 :   selidev@qq.com   编程创造城市 http://bcczcs.com
注:作者信息请保留!否则必究法律责任!
刘金玉编程,编程创造城市!
作者微信号:selidev
作者抖音号:selidev
作者B站:刘金玉编程
微信公众号:编程创造城市
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从13报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

程序分析:无。
"""

n=10

list1=[i for i in range(1,n+1)]
print(list1)
count=0
curindex=0
while len(list1)>1:
    #开始报数
    count+=1
    if count==3:
        count=0
        del list1[curindex]
        curindex-=1
        print("移除报到3的人后 ",list1)

    if curindex==len(list1)-1:
        curindex=0
    else:
        curindex += 1

# print(list1)


总结部分:

这道题目考查的除了一个程序要的逻辑思维以外,还重点需要结合程序的调试,考查一个人的程序调试能力,是一个较为综合性的题目。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程创造城市 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
细究“约瑟夫环”
17世纪的法国数学家加斯帕在《数目的游戏问题》中讲了这样一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。
算法与编程之美
2021/12/15
5410
每日一题· 有10个队员围成一圈,顺序排号,从第一个开始报数(从1到3报数), 凡报到3的人退出圈子,编程实现最后留下的是原来第几号队员?
1.题目描述: 有10个队员围成一圈,顺序排号,从第一个开始报数(从1到3报数), 凡报到3的人退出圈子,编程实现最后留下的是原来第几号队员? 2.分析: 一定要好好审题,凡事报到3的人要退出圈子
花狗Fdog
2020/10/28
1.5K0
每日一题· 有10个队员围成一圈,顺序排号,从第一个开始报数(从1到3报数), 凡报到3的人退出圈子,编程实现最后留下的是原来第几号队员?
c语言实现n人围圈报数,报到3的人退出圈子,求最后留下的是几号位的人?
有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?
吃猫的鱼Code
2023/02/02
1.1K0
编程小白 | 每日一练(77)
这道理放在编程上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从编程小白进阶到高手,需要经历的是日积月累的学习,那么如何学习呢?当然是每天都练习一道题目!!
小林C语言
2019/07/12
2600
编程小白 | 每日一练(77)
C语言指针之报数
任务描述 题目描述:有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。 编程要求 输入 初始人数n 输出 最后一人的初始编号 测试说明 样例输入: 3 样例输出: 2 源代码: #include<stdio.h> int main(void) { int n,b,c,d,i; scanf("%d",&n); int a[n]; for(b=0;b<n;b++){ a[b]=b+1;
小Bob来啦
2020/12/16
9520
C语言指针之报数
Python基础训练100题-14
题目: 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
用户9925864
2022/07/27
2750
[每日一题]报数
结合前几天的题目,今天推出的依旧是个数组的问题,今天的是高级点的一题 题目描述 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。 输入 初始人数n 输出 最后一人的初始编号 样例输入 3 样例输出 2 PS:仁者见仁,智者见智!具体题解见C语言网1047题 另外,有兴趣的同学还可以加入C语言网官方微信群,一起讨论C语言 有找密码或者其他问题也可以到里面找相关人员解决 通过加小编:dotcppcom 备注:C语言网昵称(需要先在C
编程范 源代码公司
2018/04/18
6830
C语言 | 顺序排号
这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。
小林C语言
2021/03/10
7450
Python版本的报数游戏
问题描述:有n个人围成一圈,顺序排号。从第一个人开始从1到k(假设k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。 代码实现: from itertools import cycle def demo(lst, k): #切片,以免影响原来的数据 t_lst = lst[:] #游戏一直进行到只剩下最后一个人 while len(t_lst)>1: #创建cycle对象 c = cycle(t_l
Python小屋屋主
2018/04/16
2.1K0
那些年,我们一起做过的 Java 课后练习题(36 - 40)
有 N 个整数,使其前面各数顺序向后移 M 个位置,最后 M 个数变成最前面的 M个数。
村雨遥
2022/06/15
5190
那些年,我们一起做过的 Java 课后练习题(36 - 40)
约瑟夫斯环问题的几种经典解法
经典的约瑟夫斯 问题描述: 有n个人围成一圈,从1开始顺序排号。从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号? 数组循环模拟法 const int N = 10
WindSun
2019/08/31
1.5K0
出圈子问题
题目描述: 有n个人围成一圈,按顺序排号 从第一个人开始报数(从1到3报数) 所有报到3的人退出圈子 问最后留下来的是第几个人 我们可以将这个题目看成以一类题目: n个人围成一圈 从第一个人开始数 数到N的人被淘汰 问最后剩哪个人(n和N由键盘输入)
指点
2019/01/18
4300
【趣学C语言和数据结构100例】41-45
42.(约瑟夫环问题)有 n 个人围成一圈,顺序排号。从第 1 个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位,用指针+数组实现。
LucianaiB
2024/10/27
1080
【趣学C语言和数据结构100例】41-45
Python练手例子(12)
69、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
py3study
2020/01/17
4580
考点:列表、输入、元素比较、位置交换【Python习题01】
考点:列表、输入、元素比较、位置交换【Python习题01】 题目: 输入数组, 最大的与第一个元素交换, 最小的与最后一个元素交换, 输出数组。 思路: 解决数据输入的问题,将多个数据输入后保存到一个列表中。 定义一个函数,传入列表处理,最大值的情况;再定义一个函数,传入列表处理,最大值的情况; 实现交换:对列表中的每一个数据依次比较,找到一个最值,同时去记录这个最值对应的索引位置,这里的关键是使用enumerate将列表进行序列化,这样就可以找到索引位置。 输入与输出结果: 请输入一个数:3 请输
刘金玉编程
2021/11/30
9430
考点:列表、输入、元素比较、位置交换【Python习题01】
算法修炼之练气篇——练气十三层
公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数
命运之光
2024/03/20
1610
43道Python经典案例题(有答案)
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
Python学习者
2022/11/15
1.5K0
剑指Offer(四十六)-- 最后出圈的士兵(约瑟夫)
约瑟夫问题,是经典的问题,假设有n个士兵围着成为一圈,他们的号码是从0到n-1,那么从第一个开始报数,第一个报数0,每次加1,报到n-1的时候,报n-1的士兵出圈,下一个士兵接着从0开始报数,这样循环,值得最后,剩下一个士兵,那这个士兵就是胜利者。
秦怀杂货店
2022/02/15
2780
剑指Offer(四十六)-- 最后出圈的士兵(约瑟夫)
使用Python列表方法模拟约瑟夫环问题
有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k(假设k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。
Python小屋屋主
2018/07/23
1.2K0
使用Python列表方法模拟约瑟夫环问题
考点:进制转化函数和数学通用方法【Python习题12】
本文将介绍几个python中用于进制转换的函数,讲解数学中的数值转化通用算法案例。
刘金玉编程
2021/12/27
1.3K0
考点:进制转化函数和数学通用方法【Python习题12】
相关推荐
细究“约瑟夫环”
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验