Python算法100例-2.8 猜牌术

完整源代码项目地址,关注博主私信'源代码'后可获取

  • 1.问题描述
  • 2.问题分析
  • 3.算法设计
  • 4.确定程序框架
  • 5.完整的程序
  • 6.运行结果

1.问题描述

魔术师利用一副牌中的13张黑桃,预先将它们排好后叠在一起,并使牌面朝下。然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大声数数,你们听,不信你们就看。魔术师将从最上面的一张牌开始数,第一张把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这叠牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张依次放在这叠牌的下面,再翻第三张牌正好是黑桃3,这样依次进行,将13张牌全部翻出来,准确无误。问魔术师手中的牌原始次序是怎样安排的?

2.问题分析

先根据题目描述来分析题意。题目中描述的内容比较多,但已经将魔术师出牌的过程描述得很清楚了。

假设桌子上有13个空盒子排成一圈,设定其中一个盒子序号为1,将黑桃A放入1号盒子中,接着从下一个空盒子开始重新计数,当数到第2个空盒子时,将黑桃2放入其中。然后再从下一个空盒子开始重新计数,数到第3个空盒子时,将黑桃3放入其中,这样依次进行下去,直到将13张牌全部放入空盒子中为止。需要注意的是,在计数过程中要跳过那些已放入牌的盒子,而只对空盒子计数。最后牌在盒子中的顺序就是魔术师手中牌的顺序。

3.算法分析

根据问题分析,使用循环结构来实现程序。使用程序将分析过程模拟出来,就可以计算出魔术师手中的牌的原始次序。由于有13张牌,因此显然要循环13次,每次循环时找到与牌序号对应的那个空盒子,因此循环体完成的功能就是找到对应的空盒子将牌存入。

4.确定程序框架

先定义数组a[14]用于存放13张牌,即相当于问题分析中假定的盒子。

定义变量i、j和n,其中i表示牌的序号,j表示数组的下标(盒子的序号),n用来记录当前的空盒序号,初值为1。

程序的主体结构为for循环语句,在for循环中实现将13张牌放入数组a的功能。

1)程序主框架如下:

#外循环13次,每次将一张牌放入空盒中
for i in range(1, 14):                          # i表示牌的序号# n用来记录当前的空盒序号,初值为1n = 1                                           # 每次都从一个空盒开始重新计数while n <= i:# 如果盒子非空,继续找下一个盒子# 如果盒子为空,判断盒子序号与牌的序号是否相同,相同则存入,不同则继续找

2)将i号牌放入空盒。

该功能使用while循环结构实现,代码如下:

while n <= i:if j > 13:j = 1if a[j]:                                                # 盒子非空,跳过该盒子j += 1else:if n == i:                                          # 判断该盒子是否为第i个空盒a[j] = i                                # 是则将i存入j += 1n += 1

程序流程图如图所示。

在这里插入图片描述

5.完整的程序

根据上面的分析,编写程序如下:

%%time
# 猜牌术if __name__ == '__main__':a = [0] * 14                                            # 初始化列表,用来存放13张牌j = 1                                                           # j是数组的下标,空盒子的序号print("魔术师手中的牌原始次序是:")# 外循环13次,每次将一张牌放入空盒中for i in range(1, 14):                          # i表示牌的序号# n用来记录当前的空盒序号,初值为1n = 1                                               # 每次都从一个空盒开始重新计数while n <= i:if j > 13:j = 1if a[j]:                                        # 盒子非空,跳过该盒子j += 1else:if n == i:                                  # 判断该盒子是否为第i个空盒a[j] = i                                # 是则将i存入j += 1n += 1print(a[1:])
魔术师手中的牌原始次序是:
[1, 8, 2, 5, 10, 3, 12, 11, 9, 4, 7, 6, 13]
CPU times: user 0 ns, sys: 249 µs, total: 249 µs
Wall time: 244 µs

6.运行结果

由输出结果可知,魔术师手中的牌的原始次序是1,8,2,5,10,3,12,11,9,4,7,6,13。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499603.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

04 Opencv图像操作

文章目录 读写像素修改像素值Vec3b与Vec3F灰度图像增强获取图像通道bitwise_not 算子对图像非操作 读写像素 读一个GRAY像素点的像素值&#xff08;CV_8UC1&#xff09; Scalar intensity img.at(y, x); 或者 Scalar intensity img.at(Point(x, y)); 读一个RGB像素点的像素值…

Linux-Uboot命令

help命令 进入 uboot 的命令行模式后输入“help”或者“&#xff1f;”&#xff0c;然后按下回车即可查看当前 uboot 所支持的命令。 查看某一个命令的帮助信息&#xff1a;&#xff1f;命令名称 或 help命令名称 信息查询命令 常用的和信息查询有关的命令有 3 个…

代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

122.买卖股票的最佳时机II 刷题https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/文章讲解https://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAII.html视频讲解https://www.bi…

Java的编程之旅32——继承与多态的联合使用

模拟USB设备接入电脑 1.首先建立一个名为“USB”的抽象类 public abstract class USB {public abstract void On();public abstract void Off(); }这是一个抽象类USB&#xff0c;表示一个USB设备。 该类有两个抽象方法On()和Off()&#xff0c;分别表示打开和关闭USB设备。 由…

荣获国家高新技术企业认证,苹芯科技领航AI芯片产业发展

北京苹芯科技有限公司&#xff08;以下简称“苹芯科技”&#xff09;凭借在存算一体芯片领域的卓越表现&#xff0c;荣获国家高新技术企业认证。这一荣誉不仅是对苹芯科技多年来在科技创新、产品研发等方面所取得成果的肯定&#xff0c;更是对其未来发展潜力的认可。 苹芯科技…

XSS中级漏洞(靶场)

目录 一、环境 二、正式开始闯关 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x0B 0x0C 0x0D 0x0E ​ 0x0F 0x10 0x11 0x12 一、环境 在线环境&#xff08;gethub上面的&#xff09; alert(1) 二、正式开始闯关 0x01 源码&#xff1a; 思路&#xff1a;闭…

Vue.js+SpringBoot开发电子元器件管理系统

目录 一、摘要1.1 项目简介1.2 项目录屏 二、研究内容三、界面展示3.1 登录&注册&主页3.2 元器件单位模块3.3 元器件仓库模块3.4 元器件供应商模块3.5 元器件品类模块3.6 元器件明细模块3.7 元器件类型模块3.8 元器件采购模块3.9 元器件领用模块3.10 系统基础模块 四、…

网络工程师笔记3

IP地址类型 A类 255.0.0.0B类 255.255.0.0C类 255.255.255.0D类 E类 子网掩码&#xff1a;从左到右连续的确定网络位 2-4-8-16-32-64-128-256 128 &#xff1a; 1000 0000 64 &#xff1a; 0100 0000 32 &#xff1a; 0010 0000 16 &#xff1a; 0001 0000 8 &am…

Ubuntu整系统迁移到另一个硬盘中

以ubuntu20.04为例&#xff0c;之前使用的是1T的移动硬盘&#xff0c;每次进入后性能不太稳定&#xff0c;所以最近买了块1T的固态硬盘给我的笔记本装上了&#xff0c;但是如果重新进行各种软件安装及环境配置就太麻烦了&#xff0c;所以采用了系统迁移 1.首先制作一个Ubuntu系…

hcip交换

交换机功能 无限的传输距离——识别&#xff0c;重写电信号&#xff08;帧&#xff09;保证信息完整彻底解决了冲突二层单播——MAC地址表提高端口密度 单播地址&#xff1a;MAC地址第一个字节第8位为0 组播地址&#xff1a;MAC地址第一个字节第8位为1 广播地址&#xff1a;全1…

面试数据库篇(mysql)- 11主从同步

原理 MySQL主从复制的核心就是二进制日志 二进制日志&#xff08;BINLOG&#xff09;记录了所有的 DDL&#xff08;数据定义语言&#xff09;语句和 DML&#xff08;数据操纵语言&#xff09;语句&#xff0c;但不包括数据查询&#xff08;SELECT、SHOW&#xff09;语句。 复…

走进中国电车领跑企业“NI蔚来”丨共谋商业,共话ESG

期盼与热望将冬季的寒冷拂去&#xff0c;复旦大学-华盛顿大学EMBA项目迎来了一位新朋友——美国圣路易斯华盛顿大学奥林商学院的新任院长Michael Mazzeo教授。Mazzeo院长在上海进行了为期3天的访问。这里是 Mazzeo院长上任后国际访问交流之旅的第一站。      漫步校园&…