刷题故事:AI助手助我攻克难题 | 豆包MarsCode AI 刷题

62 阅读3分钟

刷题故事:AI助手助我攻克难题

在这个数字时代,学习方式也在不断进化。作为一名对编程充满热情的学生,我一直在寻找提高自己编程技能的方法。最近,我在使用AI刷题功能的过程中遇到了一个特别有趣的题目,它不仅让我体验到了解题的乐趣,还让我深刻体会到了团队合作的重要性。这个题目是关于如何合理分配糖果给小朋友的,具体来说,就是要解决给定一定数量的糖果(n颗),每个小朋友得到的糖果数必须在l到r之间的情况下,最少可以分给多少个小朋友,最多可以分给多少个小朋友。如果无法正好分配,则返回-1。

遇到的挑战

一开始,我对这个问题并没有太多头绪。尝试了几种不同的方法后,我发现自己的思路有些混乱。就在这时,我决定求助于AI助手。通过与AI的交流,我开始逐渐理解了这个问题的关键点——即如何确定最小和最大分配方案。

解决方案

在AI的帮助下,我学到了如何利用数学中的除法和取整运算来解决问题。具体实现如下:

  1. 计算最少的小朋友数量:这可以通过将总的糖果数除以单个小朋友能获得的最大糖果数(r)并向上取整来计算,这样可以确保每个小朋友至少能获得规定的最小糖果数(l)。
  2. 计算最多的小朋友数量:这可以通过将总的糖果数除以单个小朋友能获得的最小糖果数(l)并向下取整来计算,这样可以保证每个小朋友不会超过规定的最大糖果数(r)。
  3. 验证分配可行性:最后,需要检查基于上述计算得出的最少和最多小朋友数量是否真的能够按照要求分配糖果。如果最小数量的小朋友即使每人只拿最小数量的糖果也会超出总数,或者最大数量的小朋友即使每人拿最大数量的糖果也达不到总数,则说明分配不可行,应返回-1。

import math

def solution(n: int, l: int, r: int) -> list:
    # 计算最少和最多小朋友数量
    min_friends = math.ceil(n / r)
    max_friends = n // l
    
    # 检查是否可以正好分配糖果
    if min_friends * l > n or max_friends * r < n:
        return [-1]
    
    return [min_friends, max_friends]

if __name__ == '__main__':
    print(solution(10, 2, 3) == [4, 5])  # 样例1
    print(solution(7, 3, 5) == [2, 2])   # 样例2
    print(solution(8, 1, 4) == [2, 8])   # 样例3

团队合作的力量

在解决这个问题的过程中,我不仅学会了新的编程技巧,更重要的是,我认识到了与他人合作的价值。在讨论这个题目时,我和几位同学分享了自己的想法,并从他们那里得到了很多宝贵的反馈。这种相互学习、共同进步的过程,让我更加热爱编程,也更加珍惜每一次学习的机会。

结语

通过这次经历,我深刻体会到,无论是面对学习上的困难还是生活中的挑战,只要有正确的方法和积极的态度,就没有克服不了的难关。同时,我也认识到,现代技术工具如AI助手,能够为我们提供极大的帮助和支持,让我们在追求知识的路上不再孤单。希望我的故事能够鼓励更多的人勇敢地面对挑战,享受学习带来的乐趣。