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

文章介绍了如何使用Python解决数字变换问题,即给定两个正整数a和b,通过加1、减1、乘2的操作,求解最少需要多少次操作可以从a变化到b。这个问题可以通过状态迁移图和广度优先搜索算法来解决,文中给出了详细的编程思路和步骤,并提到避免重复判断的重要性。
摘要由CSDN通过智能技术生成

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

我是猫妹,一名爱上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行:返回经过的变换次数。

怎么样?

你理解了吗?

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

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

我是猫妹,咱们下次见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值