python--模拟报数游戏(使用itertools模块和列表两种方法解决)

【华为OD考试真题】报数游戏(Python实现) 100个人围成一圈,每个人有一个编码,编号从1开始到100。 他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。 阅读详情

题目:

1)n个人围坐一圈从1开始顺序报号,报到k的人退出圈子,从下一个人开始重新报数,问留下来的是原来的几号。
2)编写程序模拟游戏过程,初始人数n和报数k随机生成。

运用的知识点:

  1. 推导式:列表推导式和生成器推导式
  2. itertools模块及其中的cycle()函数和islice()函数
  3. 内置函数next()访问迭代器对象
  4. 列表的切片操作
  5. 循环结构

方法一:
使用itertools来写

import itertools,random

def Baoshu(n,k):
    it=(i+1 for i in range(n))//利用生成推导式生成一个迭代序列,里面元素为1~n
    it=itertools.cycle(it)//使用itertool模块中的cycle()函数生成一个循环序列1,···,n,1,···,n,1,···,n,···
    
    //内置函数next()访问迭代对象,因为最后会剩下一个,所以在上面这个it序列中要访问k*n-1个
    for i in range(n-1)://每循环一次就要移除一个号码
        for j in range(k)://过滤掉前k个元素
            next(it)
        //islice()函数对迭代对象切片,取前n-i-1个号码,移除第k个号码
        it=itertools.cycle(itertools.islice(it,n-i-1))
    return next(it)//最终得到的迭代对象中是同一个重复元素
    
n=random.randint(1,100)
k=random.randint(1,100)
l=Baoshu(n,k)
print("n="+str(n)+",k="+str(k)+"\n最后留下来的是原来的"+str(l)+"号")


方法二:
用列表,找到每次第k个元素所在索引并移除列表

import random
def Baoshu(n,k):
    List=list(range(1,n+1))
    index=k-1
    while len(List)>1:
        index=(index+len(List))%len(List)
        List.pop(index)
        index=index+k-1
    return List[0]

n=random.randint(1,100)
k=random.randint(1,100)
l=Baoshu(n,k)
print("n="+str(n)+",k="+str(k)+"\n最后留下来的是原来的"+str(l)+"号")

方法三:
使用列表切片,每次将第k个元素的后段的元素与第k个元素前段拼接在一起,从而得到一个移除第k个元素的列表

import random

def Baoshu(n,k):
    List=[i+1 for i in range(n)]
    while len(List)>1:
        index=(k+len(List)-1)%len(List)
        List=List[index+1::]+List[:index:]
    return List[0]
    
n=random.randint(1,100)
k=random.randint(1,100)
l=Baoshu(n,k)
print("n="+str(n)+",k="+str(k)+"\n最后留下来的是原来的"+str(l)+"号")

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Python中itertools.combinations()的使用 文章目录itertools.combinations()作用示例itertools.combinations_with_replacement()作用示例 itertools.combinations() 作用 来自 itertools 模块的函数 combinations(list_name, x) 将一个列表和数字 ‘x’ 作为参数,并返回一个元组列表,每个元组的长度为 ‘x’,其中包含x个元素的所有可能组合。列表中元素不能与自己结合,不包含列表中重复元素 示例 from itertools impor 阅读详情

相关推荐

报数游戏程序计算结果以及结果可视化 附python程序

报数游戏规则:所有人围成一个圆圈,从第1个人开始,按照“1、2、1、2、1……”的顺序依次报数,报到“2”的人被淘汰,游戏循环进行,剩下的最后一个人获胜。实际上就是求出来总数n的时候,排在第几的人留到了最后,是一个很容易通过编程解决的问题;如果需要单独的程序,可以联系我。有什么办法让自己总能获胜呢?

三维点云技术探索 491

pythonwhile列表_python while、for循环、list列表

1、while循环(循环也可叫迭代、遍历)while 循环 必须有一个计数器count=0while count0:print('用户已存在')方法2:if username in stus:print('用户已存在')if username not in stus:print('用户不存在')...

weixin_39549936的博客 437

Python itertools 模块全面详解

itertools惰性求值:只在需要时生成元素,不预先生成整个序列内存高效:处理大型数据集时几乎不占用额外内存可组合性:函数可以自由组合形成复杂管道C语言实现:底层由C实现,执行效率高itertools提供高效的内存管理(惰性求值)实现复杂的迭代模式优化数据处理管道简化组合数学操作处理GB级数据集而不耗尽内存编写更简洁、更Pythonic的代码提高数据处理任务的性能实现复杂的算法逻辑优先使用迭代器而非列表推导式处理大数据组合多个itertools函数构建处理管道。

记录点滴 768

python模拟报数游戏

题目:编写程序,模拟报数游戏。有n个人围成一圈,顺序编号,从第一个人开始从1到k(假设k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。初步实现功能,使用集合输出剩下的数字,而未考虑是第几号(每次从头开始报数)完成剩下数字对应的号,使用列表(每次从头开始报数)每次从下一个人开始报数。

思索的蜗牛的专栏 2188

昇腾NPU实战:PaddleSpeech语音模型高效部署与性能优化指南

本文详细介绍了如何在华为昇腾NPU上高效部署PaddleSpeech语音识别模型。通过使用官方Docker镜像、解决依赖冲突、修改源码适配NPU算子,并应用混合精度与批处理等优化技巧,实现模型在昇腾平台上的稳定运行与性能提升,为AI语音应用提供高性价比的国产硬件部署方案。

weixin_29214691的博客 181

【BAT32G113-仿真器及脱机烧录器教程-A3-2024/9/19】

提示:此壁纸收集于互联网,如有侵权,请联系作者!今日下班,闲来无事,就与生活中在乎的人闲日常,互相彼此增进一些友谊或爱意情愫!在座的朋友看到这里,有时间,抽抽空,多多联系一下,身边重要的人哟!四种指示灯和一个按钮:MODE->代表红色POWER->代表黄色ACTIVE->代表蓝色STATUS->代表XX(不记得了)黑色按钮:按键上电,会进入升级模式,这里我们一般默认不需要改变!仿真工具-ICE8-PRO介绍隶属于产品分支里。烧写工具-CMS-WRITER8 LITE介绍点击。

星新计划的博客 8259

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

题目有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。def main():n = int(input("输入人数:"))List = []for i in range(1, 【1】):List.append(i)s = 0while 1:t = 0for i in range(1, 【2】):s= 【3】if s % 3 == ...

weixin_39680380的博客 914

逆向选择启示录:一个失败高频策略如何意外跑赢市场

本文探讨了高频交易中的逆向选择现象,揭示了一个失败的高频策略如何通过简化意外跑赢市场。通过加密货币市场的实证分析和蒙特卡洛模拟,研究发现低预测性的简单策略反而更具鲁棒性,有效规避了逆向选择风险。文章还提供了小币种做市策略的优化框架和实践建议,为量化交易者提供了宝贵洞见。

weixin_29191669的博客 401

python itertools模块详解

目录简介无穷迭代器count()cycle()repeat()有限迭代器chain()groupby()accumulate()组合迭代器product()permutations()combinations()combinations_with_replacement() 简介 itertools,是python的一个内置模块,功能强大,主要用于高效循环创建迭代器。注意一点,他返回的不是list,而是iterator 无穷迭代器 count() count(start, [step])会创建一个无限迭代器

嘤嘤的博客 2万+

大语言模型无代码构建知识图谱概述

由示例可以看出,大语言模型的泛化能力能够非常精准的抽取文本中的实体、关系等知识信息。其能够大大提升知识提取的效率与准确性。HuggingFists低代码平台的出现进一步促进了知识图谱构建的效率。它大幅降低了知识图谱构建人员的技术要求,使得从事该工作的人员有了更大的选择范围。不断下降的构建成本,意味着可以有更多的客户享受到知识图谱带来的业务价值。

colorknight的专栏 1817

图解电动汽车:电动汽车电控系统

电动汽车的电控系统通常包含三个子控制系统 —— 整车控制器、电池管理系统、驱动电机控制器。 整车控制器 VCU 整车控制器 VCU(Vehicle Control Unit)作为电动汽车的中央控制单元,是整个控制系统的核心,也是各个子系统的调控中心。VCU 的主要功能就是协调管理整车的运行状态,包括采集电机及电池状态,采集加速踏板信号、制动踏板信号、执行器及传感器信号,根据驾驶员的意图综合分析做出相应判定后,监控下层的各部件控制器的动作,它负责汽车的正常行驶、制动能量回馈、整车发动机及动力电池的能量管理、.

程序员「阿基米东」的编程之旅 1万+

python标准库之itertools模块

itertools是python内置的模块,使用简单且功能强大,这里尝试汇总整理下,并提供简单应用示例;如果还不能满足你的要求,欢迎加入补充。 一、组成 itertools主要来分为三类函数,分别为无限迭代器、输入序列迭代器、组合生成器,我们下面开始具体讲解。 二、无限迭代器 1、Itertools.count(start=0, step=1) 创建一个迭代对象,生成从start开始的连续整数,步长为step。 如果省略了start则默认从0开始,步长默认为1 如果超过了sys.maxin..

xcntime的专栏 1万+

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

weixin_74013772的博客 254

python | Python中的itertools模块使用技巧

itertools模块是Python标准库中的一个高效工具箱,提供了许多用于处理迭代器的函数。通过itertools模块,可以简化复杂的循环和迭代操作,大幅提升代码效率。itertools模块内的函数涵盖了排列组合、无限迭代器、分组、过滤等丰富功能,特别适合数据处理、序列操作等场景。

csdn_xmj的博客 2294

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

9791

从 SAP BTP trial 到第一个 CPI iFlow 的实操路线图

本文介绍了如何从零开始学习SAP CPI(现称SAP Integration Suite中的Cloud Integration能力)。主要内容包括:1)明确学习边界,建议使用SAP BTP trial账号进行个人练习,注意90天有效期限制;2)理解SAP BTP账号模型层级结构(Global Account→Subaccount→Space);3)详细说明申请trial账号流程,推荐选择Singapore区域以避免兼容问题;4)指导如何检查Entitlements和Quotas,强调应专注于SAP Inte

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 163

使用Python列表方法模拟约瑟夫环问题

问题描述:有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k(假设k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。之前曾经推送过一...

董付国的Python专栏 594

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【Python】使用itertools.groupby()进行列表的归类和个数统计

本文概览一、问题来源二、groupby概述0、文档介绍1、列表的使用2、列表套字典的使用3、函数返回的方式使用 一、问题来源 刷题的时候想要快速统计一个列表当中连续出现的元素的个数,除了自己实现之外,想要更快速的方式就百度了一下,查到了itertools模块的groupby方法,挺有意思的,所以做一个记录 二、groupby概述 0、文档介绍 本段下面有总结,不想看的话这里可以跳过 官方文档指路: python中itertools库的官方文档 节选: itertools.groupby(iterable,

抱有远大理想的小灰狼正在coding 4510

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python_itertools模块

1. itertools模块的介绍 在Python中,迭代器(Iterator)是常用来做惰性序列的对象,只有当迭代到某个值的时候,才会进行计算得出这个值。因此,迭代器可以用来存储无限大的序列,这样我们就不用把他一次性放在内存中,而只在需要的时候进行计算。所以,对于读取大文件或者无线集合,最好是使用迭代器。实际上,Python2的大多数函数都是返回列表等序列,而Python3都已经改进为返回迭代器...

越吃越胖的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python 中如何使用 itertools 模块实现组合与排列?

在 Python 编程中,组合(Combination) 和 排列(Permutation) 是常见的数学计算,广泛应用于数据分析、密码学、排列组合问题、概率统计等领域。Python 提供了内置的 `itertools` 模块,支持高效地生成**排列、组合、笛卡尔积**等。本文将详细介绍 `itertools` 模块中的 **`permutations()`(排列)、`combinations()`(组合)、`combinations_with_replacement()`(可重复组

1479

Python itertools模块combinations方法

  1、Python itertools模块combinations(iterable, r)方法可以创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序。 import itertools list1 = [1, 3, 4, 5] list2 = list(itertools.combinations(list1, ...

dfdvl113971的博客 1463

Python itertools模块使用详解

输出: ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')# 输出: ('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')# 输出: ('A', '1'), ('A', '2'), ('B', '1'), ('B', '2')# 输出: ('A', 'B'), ('A', 'C'), ('B', 'C')

2301_80044974的博客 658

Python itertools模块

Python itertools模块   今天学了简单好玩的模块,itertools模块,简单的说,itertools模块就是产生一个循环器   先来看下这个模块的功能都有哪些吧   无穷循环器 函数 说明 用法 输出结果样例 count() 从开始的数字一直数下去 count(10) 10

Calling_Wisdom 9791

Python-itertools 模块详解

itertoolsitertools是 Python 标准库中用于的模块,提供了一系列生成迭代器的工具函数,适用于组合生成、数据分组、无限序列等场景,能显著简化代码并优化性能。itertools。

wanglaqqqq的博客 1934

Python中itertools 模块的用法

本文总结了 itertools 模块的常规操作,学习并掌握这些极为便利的操作非常有助于提高自己的编码效率。

m0_72282564的博客 981
上一篇: 如何解决--Mac的磁盘工具无法对移动硬盘分区,分区按钮是灰色的?
下一篇: person.js:1 Uncaught ReferenceError: $ is not defined at person.js:1
~祝今在
博客等级 码龄7年 597粉丝 54原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~祝今在

喝个茶水

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值