“最小步数问题”之剖析 | 豆包MarsCode AI 刷题

142 阅读4分钟

本题来源于“豆包MarsCode AI 刷题”第39题“计算从x到y的移动步数”

首先我们来看一下题目描述:

Snipaste_2024-11-26_21-05-26.png

代码刚开始的大致框架:

Snipaste_2024-11-26_21-06-04.png

下面,我们就开始剖析这道题目。(个人比较喜欢用Python写)

这道题让我们计算最小步数,并且每次移动步数只能以1,0递增或者-1递减,并且还有一个限定条件是首末步长必须是1。这就会让很多人陷入思维定势,意思就是必须第一步与最后一步步长一定是1,实际上并不是这样,并不需要一定第一步是1,或者最后一步一定为1。而是换一下思维方式,我们是不是只需要让步长在递增过程中出现至少2次步长为1的情况,那我们是不是就可以理所当然的认为第一次步长为1是第一步,第二个步长为1是最后一步呢!并且最后的步数加和也不一定非得刚好=y-x,这点同样重要。好,那么解决这两项思维定势后,我们就开始着手写代码了

首先,我们要先计算距离,用到了abs函数,返回的是绝对值

distance = abs(x_position - y_position)

接着,对distance进行判断,若距离为0,则直接返回0:

if distance == 0:
    return 0

接着我们创建一个列表position[],用来存放步数 定义步数变量step = 0, 用来进行步数的加减 定义一个布尔变量double = True, 赋初始值为True

position = []
step = 0
double = True   

接着我们设置一个无限循环,有返回值的时候退出循环 如果为真,则步数加1,将double置为False,将步长存入列表中进行下一个循环; 下一个循环开始,double为False,故执行else语句,将double置为真,同时保持step的值不变,再次存入列表中 由此类推,列表中就得到了“1, 1, 2, 2, 3, 3, 4,4, …… ” 那么在存入列表后,对列表中匀速进行求和sum,如果大于等于距离,就返回列表长度,也就是执行的步数!

while True:
    if double:
        step += 1                           #1
        double = False                      #11
    else:                                   #121
        double = True                       #1221
    position.append(step)
    ```
    if sum(position) >= distance:     #打破常规思维,最后步长的和不一定非得刚好等于distance,也可以大于
    return (len(position))        #并且步长一定非得开始为一最后也为一,因为只要保证输入两次1后,走的距离都是一样的,就可以认为两个1分别是首和末
```

至此,这道题就解析完成了!

让我们来看一下最终的代码框架:

Snipaste_2024-11-26_21-32-57.png

测试:

Snipaste_2024-11-26_21-34-17.png

可以发现,在面对一些题目的描述时,我么们或多或少都会有一定的思维定势,而编程需要发散思维,这就需要我们多做题,多多锻炼思维模式。我也尝试问过右边的AI工具,但是结果不尽人意,思路不对,代码漏洞很大,最基本的三个示例检测都通不过,所以关键时刻还得靠自己思考!

以下是一些将 AI 刷题功能与其他学习资源相结合以提升学习效果的方法和学习建议:

  1. 知识点对应

    • 方法:在使用 AI 刷题功能时,对照教材的章节进行刷题。例如,当学习数学教材中某一章节的函数知识时,先在教材中系统学习函数的定义、性质、常见类型等内容,然后在 AI 刷题系统中找到对应的函数相关题目进行练习。
    • 优势:教材提供了系统的知识架构,有助于从原理上理解知识点,而 AI 刷题则可以通过实践来巩固这些知识点,加深对教材内容的理解和记忆。
  2. 笔记指导刷题

    • 方法:在做学习笔记的过程中,对重点、难点知识进行标注和总结。然后,在使用 AI 刷题功能时,有针对性地寻找与笔记中重点、难点相关的题目进行练习。例如,在历史学习中,笔记记录了某一历史事件的原因、过程和影响,根据这些内容在 AI 刷题系统中找到考查该历史事件相关内容的题目,如分析类似历史事件发生的原因等。
    • 优势:学习笔记帮助梳理知识脉络,明确学习重点,而 AI 刷题则对这些重点知识进行实践检验,强化记忆和理解。