Python巧解数字变换问题,有点意思(65)

news2024/9/23 5:31:20

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

和猫妹学Python,一起趣味学编程。

今日主题

如何用Python解决数字变换问题

比如:

对于一对正整数a和b,对a只能进行加1,减1,乘2操作,问最少对a进行几次操作能得到b?

a=3,b=11,3*2*2-1=11,3次操作得到11

编程思路

数字变换问题属于状态迁移图问题,可以用广度优先搜索,寻找a到b状态迁移最短路径。

对于每个状态s,可以转换到是s+1、s-1、s*2。

编程步骤:

1.把初始状态a入队

2.出队一个状态s,然后把s+1,s-1,s*2入队

3.反复循环2,直到状态s为b

今日主题

代码实现(代码见同名公众号,次条推文):

代码逻辑:

3行:函数atob的参数a和b,表示起始数据a,终点数据b,返回值c表示经过的变换次数。

4行:创建一个队列,队列元素为元组。元组中第一个元素为当前数字、第二个元素为经过的变换次数。

5行:已经经过判断过但是不符合的数字,需要将其过滤掉。

避免重复判断,比如+1-1无限循环。

6~21行:依次从队列中取出一个元素,判断是否满足要求。

如果满足要求,退出循环。否则,将其变换值(+1,-1,*2)加入队列。

7行:从队列中弹出一个元素,该元素为元组。s,c分别表示当前数字,经过变换的次数。

8~9行:经过的变换等于预期值,退出循环。

11~17行:当前数字小于预期值时,允许它向大处变换。

新的状态值之前没有被判断过,才可以加入队列,才可以加入已判断集合。

18~21行:当前数字大于预期值时,允许它向小处变换。

新的状态值之前没有被判断过,才可以加入队列,才可以加入已判断集合。

22行:返回经过的变换次数。

怎么样?

你理解了吗?

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python计算器编程:从入门到精通

Python计算器编程:从入门到精通 随着计算机技术的不断发展,计算器已经成为了我们日常生活中必不可少的工具。Python是一种简单易学的编程语言,也是一种十分适合编写计算器程序的语言。 为什么选择Python编写计算器程序? Python…

网络安全合规-ISO 27701

ISO 27701是什么? 是ISO 27001和 ISO 27002的扩展内容,对建立、实施、维护和持续改进隐私信息管理系统(PIMS)的各项要求做出了规定,是首部针对隐私信息管理的国际标准。该标准概述了适用于个人可识别信息控制者和处理者…

Cesium中,在shader里访问顶点法向

在shader中访问顶点法相 前提条件:使用cesium内部的geometry,非自定义的geometry,比如BoxGeometry。 构造Geometry时,需要指定vertexFormat里面包含NORMAL,这样在构造Geometry时,Cesium会自动生成顶点法向。在默认情况…

idea打的包字符集为GBK

1.最近对接一个打印机厂家的机器,他们对与打印数据要求字符集是UTF-8的,做完程序在自己idea上运行是是能够打印的,但是打包后,就不能够打印了。然后问了设备方是否是他们机器的原因,后面他们问了我这报错码&#xff0c…

CSS选择器总结

作者:爱塔居 专栏:JavaEE​​​​​ 作者简介:大三学生,希望和大家一起进步! 文章目录 文章目录 一、CSS选择器的概念 二、基础选择器 2.1 标签选择器 2.2 类选择器 2.3 id选择器 2.3 通配符选择器 三、复合选择器 3.1…

【mysql环境】mysql的多种安装方法、环境配置总结

目录 第一步:mysql安装方法 方法一: 方法二: 方法三: 第二步:配置环境变量 第三步:验证是否配置成功 第一步:mysql安装方法 方法一: 下载MSI安装程序,进行mysql的…

解决多ffmpeg环境冲突问题

解决多ffmpeg环境冲突问题 问题描述: 使用make安装了ffmpeg-5.1,安装目录目录位于/usr/loacl/ffmpeg,但是使用ffmpeg -version命令出来的版本是4.3,如下图所示: 解决方案: 可以使用以下命令来确定正在…

redis源码之:扩容后的dictScan遍历顺序与JDK的concurrentHashMap 扩容机制

进入正题前,先来复习下关于2次幂的mod运算 设n为2次幂,数a mod n 等价于 a & n-1 从二进制来看,相当于余数为a省去n最高位左侧的所有位(含最高位),保留n右侧所有低位即为余数 如:a 7(0000_0111),n4(0000_0100),通…

Linux挂载详解

Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。 因此产生的问题是,当在 Linux 系统中使…

高考完,报了个嵌入式专业~~

正文 大家好,我是bug菌~ 最近高考成绩陆续公布,也是看到了一家欢喜一家忧心,确实像我们在外面打拼过的这群人,就深有体会:"高考确实是人生的一道分水岭"。 不过今天这里主要是介绍一下嵌入式行业相关的一些专业学校&…

一文掌握设计模式(定义+UML类图+应用)

一、引子 从学编程一开始就被告知,要想做一名优秀的程序员两大必要技能:1.源码阅读(JDK、C等底层语言封装) 2.设计模式(使用某种语言优雅的落地典型场景功能)。一般随着工作年限的增长,被迫对底层语言/框架源码阅读的越来愈多,但是…

软件的演练场景编排的主要作用是什么?

在软件开发过程中,演练场景编排是一种重要的方法,旨在提供一个模拟真实环境的平台,帮助开发团队和用户测试和验证软件的功能、性能和适应性,那软件的演练场景编排的主要作用是什么? 软件演练场景编排是指通过创建特定的…

【Vue2.0源码学习】实例方法篇-数据相关方法

文章目录 0. 前言1. vm.$watch1.1 用法回顾1.2 内部原理 2. vm.$set2.1 用法回顾2.2 内部原理 3. vm.$delete3.1 用法回顾3.2 内部原理 0. 前言 与数据相关的实例方法有 3 个,分别是vm.$set、vm.$delete和vm.$watch。它们是在stateMixin函数中挂载到Vue原型上的&am…

MMDeploy SDK使用记录(ncnn)

参考:mmpose/projects/rtmpose at main open-mmlab/mmpose GitHub MMDeploy 提供了一系列工具,帮助我们更轻松的将 OpenMMLab 下的算法部署到各种设备与平台上。目前,MMDeploy 可以把 PyTorch 模型转换为 ONNX、TorchScript 等和设备无关的…

RabbitMQ 能保证消息可靠性吗

系列文章目录 消息队列选型——为什么选择RabbitMQ RabbitMQ 五种消息模型 RabbitMQ 能保证消息可靠性吗 系列文章目录前言一、消息可靠性的定义二、几种不可靠的场景三、防意外丢失1. 消息持久化2. 队列持久化3. 发布确认3.1 简单发布确认3.2 批量发布确认3.3 异步发布确认 4…

Vector - CAPL - CAPL入门 - 01

前面已经介绍了很多CAPL相关的函数极其应用,今天CAPL能够完成的功能来介绍在车载网络测试中都能够帮助测试工程师完成哪些工作?让我们对它有一个最基础的认识。 CAPL在总线中的应用 > 分析特定消息或特定数据 > 分析数据流量 > 创建和修改工具…

智慧班牌系统源码,相关技术:springboot,elmentui ,Quartz,jpa,jwt

电子班牌系统的主要功能包括:班级管理、学生信息管理、教师管理、课程管理、作业管理、考试管理、公告管理、评价管理、学校消息发布等。在班级管理方面,该系统可以实现教师对班级的整体管理以及学生个人信息的管理,包括个人信息、考试成绩、…

【Java】Java核心 72:XML (上)

文章目录 1 XML概述什么是XMLXML作用 2 编写第1个XML文件需求效果步骤 3 XML的组成:声明和元素XML组成文档声明元素(标签、标记) 4 XML的组成:属性、注释和转义字符属性的语法注释转义字符[实体字符]小结 1 XML概述 什么是XML 英…

rabbitmq设置允许外部访问

rabbitmq默认端口为15672,用户名和密码都为guest,是不允许外部访问的. 允许外部访问设置需要操作两步: 第一步:添加其它用户,guest只能用于本机 第二步:Virtual Host允许添加的用户访问,点击下图红色部分. spring配置 spring:rabbitmq:host: 192.168.101.57port: 5672username…

idea中有个目录不显示,磁盘中是有的

java项目src下有个目录data不显示 通过打开D盘看目录是有的,运行项目的时候报错,找不到目录下的文件。 解决方案: idea -> file -> seetings -> EDitor -> file types 打开页面后右侧显示有ignore files and folders 查看这里面有…