青训营X豆包MarsCode 技术训练营第十一课 | 豆包MarsCode AI 刷题

118 阅读14分钟

问题描述

小M在集市上买了一公斤奶酪回家。然而,在小M不在的时候,小F偷偷地偷走了 ABBA​ 公斤的奶酪。现在,小M想知道他还剩下多少奶酪。要求答案以分数的形式表示,并且分数的分母必须为 BB。

  • 思路

    • 本题的核心思路非常直观,已知小 M 原本有一公斤奶酪(可以看作是分母为 B,分子为 B 的分数形式,即 B/B,代表整体为 1),小 F 偷走了 A/B 公斤的奶酪,那么要求剩下奶酪的量,只需要用原本奶酪的量(用分数表示为 B/B)减去被偷走的量(A/B),也就是计算同分母分数的减法,分母不变,分子相减,即分子为 B - A,分母依然是 B,最后将得到的分子和分母以分数的形式输出即可。
  • 图解(以 A = 2B = 7 为例)

    • 我们可以把一公斤奶酪想象成一个完整的蛋糕,将这个蛋糕平均分成 7 份(对应分母 B = 7),此时整个蛋糕就可以用分数 7/7 来表示。
    • 小 F 偷走了 2/7 公斤的奶酪,也就是拿走了这个蛋糕的 2 份。
    • 那么剩下的奶酪份数就是总共的 7 份减去被偷走的 2 份,即 7 - 2 = 5 份,所以剩下的奶酪用分数表示就是 5/7
  • 代码详解

public class Main {
    public static String solution(int A, int B) {
        // 计算分子
        int numerator = B - A;
        // 分母为B
        return numerator + "/" + B;
    }

    public static void main(String[] args) {
        System.out.println(solution(2, 7).equals("5/7")); // 输出: true
        System.out.println(solution(1, 3).equals("2/3")); // 输出: true
        System.out.println(solution(3, 5).equals("2/5")); // 输出: true
    }
}
  • 计算分子部分

    • 在 solution 方法中,首先通过 int numerator = B - A; 这行代码计算剩下奶酪的分子部分。按照前面提到的同分母分数减法思路,用原本奶酪对应的分子(也就是 B)减去被偷走奶酪对应的分子(A),得到的差值 B - A 就是剩下奶酪的分子,存储在变量 numerator 中。
  • 构建并返回分数形式的结果部分

    • 接着通过 return numerator + "/" + B; 语句将计算得到的分子和给定的分母 B 以字符串拼接的方式组合成一个分数形式的字符串。这里直接使用字符串拼接操作符 +,将分子、斜杠(/)和分母依次连接起来,最终返回这个表示剩下奶酪量的分数形式的字符串。
  • 主函数 main 部分

    • 在 main 方法中,主要是对 solution 方法进行简单的测试验证。通过传入不同的测试样例对应的参数(A 和 B 的值),调用 solution 方法得到返回的分数形式的字符串结果,然后使用 equals 方法将这个结果与预期的正确分数形式的字符串进行比较(例如 solution(2, 7) 的返回结果与 "5/7" 比较),将比较得到的布尔值结果输出到控制台,以此来检查 solution 方法在不同输入情况下是否能正确返回预期的表示剩下奶酪量的分数形式的字符串。

知识总结

  • 新知识点梳理

    • 同分母分数的简单运算概念在编程中的应用:本题运用了同分母分数减法的基本数学概念,即将实际问题中的数量关系转化为分数运算,然后通过编程实现计算过程,了解到在解决一些涉及比例、部分与整体关系的实际问题时,可以借助分数运算来清晰地表达和计算结果,并且要能准确地将数学逻辑转化为代码逻辑。
    • 字符串的简单拼接操作用于结果展示:学会了通过字符串拼接操作(使用 + 操作符)将计算得到的数值(分子和分母)组合成符合要求的分数形式的字符串进行输出,明白了如何根据题目需求灵活地构造和展示结果字符串,这在很多需要输出特定格式文本的编程场景中是常用的技巧。
  • 理解

    • 对于同分母分数运算在编程中的应用,就像是把数学课本里学到的知识搬到代码世界里,用代码的方式去实现分数运算来解决实际的数量计算问题,它体现了数学和编程之间紧密的联系,通过合理运用数学规则可以更准确高效地解决这类具有实际意义的编程题目。而字符串拼接操作则是一种简单但实用的文本构造手段,能让我们按照想要的格式把数据展示出来,让程序输出的结果更符合题目要求和人们的阅读习惯。
  • 学习建议(针对入门同学)

    • 在学习同分母分数运算应用于编程时,要先回顾同分母分数加、减运算的数学原理(分母不变,分子相加减),然后通过多做一些类似的简单编程题目,比如计算物品分配后剩余量、溶液混合后浓度变化等可以用分数表示的问题,将数学运算过程一步一步地用代码实现出来,加深对如何在编程中运用分数运算的理解。同时,可以自己手动模拟代码执行过程,分析每一步变量的变化和计算结果是否符合预期,强化对代码逻辑的把握。
    • 在学习字符串拼接操作时,先从简单的字符串拼接示例入手,比如拼接姓名、地址等简单信息,了解不同类型的数据(如整数、字符串等)在拼接时的注意事项(可能需要进行类型转换等)。然后在实际编程中,遇到需要输出特定格式文本的情况,主动思考如何运用字符串拼接来构造合适的输出内容,多尝试不同的拼接方式和顺序,熟练掌握这一基本的文本处理技巧,并且注意代码的可读性,合理添加空格、括号等让拼接后的字符串更清晰易懂。

学习计划

  • 制定刷题计划

    • 基础入门阶段

      • 目标设定:熟悉基本的数据类型操作(如整数运算、字符串处理)以及简单数学运算在编程中的应用,掌握本题涉及的同分母分数运算和字符串拼接的基础用法,能够独立完成类似简单难度、逻辑清晰的题目,并且养成良好的代码书写习惯和逻辑分析能力。
      • 刷题范围:以涉及简单数学运算(加、减、乘、除)与字符串操作结合的基础编程题目为主,可以在常见的刷题平台(如 LeetCode、牛客网等)上筛选难度标记为简单的题目,或者在 MarsCode AI 刷题功能中查找对应知识点的基础题目集,例如关于物品数量计算后按特定格式输出、简单文本信息组合等类型的题目。
      • 时间安排:每天安排 1 - 2 小时用于刷题,每次刷 2 - 3 道题。在刷题过程中,认真分析题目要求,确定涉及的知识点和需要进行的操作,自己动手编写代码实现,注意代码的规范性(如变量命名合理、代码缩进正确等)和可读性,写完后通过简单的测试用例(参考本题主函数中的测试思路,对比输出结果是否符合预期)进行验证,同时记录下解题过程中遇到的问题和疑惑点,及时查阅资料或请教他人解决。
      • 总结归纳:每完成 5 - 10 道题后,对涉及的知识点进行总结回顾,比如对比不同题目中数学运算和字符串操作的具体运用方式有什么异同,整理出自己的知识点笔记,加深对基础知识点的理解和记忆,并且可以对相似题目进行分类整理,便于后续复习和回顾。
    • 巩固提升阶段

      • 目标设定:掌握中等难度的编程题目,能够灵活运用数学运算和字符串处理技巧解决更复杂的情况,比如涉及多个数学运算步骤、多种字符串格式化要求以及不同数据类型之间的转换等,提高解题效率和代码质量,学会分析不同题目之间的关联和差异,优化解题思路。
      • 刷题范围:拓展到包含复杂数学运算(如分数运算的更多场景、小数与分数混合运算等)与复杂字符串处理(如按照特定模板格式化字符串、字符串解析后再重新组合等)结合的题目,以及需要综合运用多种基本操作来解决问题的题目。可以在刷题平台上选择中等难度的题目板块,或者利用 MarsCode AI 刷题的智能推荐功能,根据已掌握的知识点推荐相应的中等难度题目。
      • 时间安排:每周抽出 3 - 4 天,每天安排 2 - 3 小时刷题,每次完成 3 - 5 道题。在刷题过程中,注重思考题目与之前做过的基础题目的联系和区别,尝试多种解题思路,对于做错的题目要详细分析错误原因,记录在错题本上,并及时复习相关知识点进行查漏补缺,同时可以尝试对题目进行变形,自己拓展出类似的题目进行练习,加深对知识点的理解和运用能力。
      • 总结归纳:针对每类题型(如复杂分数运算题型、复杂字符串格式化题型等)进行总结,梳理出这类题型的通用解题模板和注意事项,同时对这段时间内新学习的知识点和解题技巧进行整理,形成自己的知识体系框架,便于复习和回顾,并且可以通过绘制思维导图等方式将知识点之间的关联更加清晰地展现出来,帮助自己更好地理解和记忆。
    • 强化突破阶段

      • 目标设定:攻克高难度题目,深入理解在复杂场景下数学运算和字符串处理的深层次原理和优化策略,能够应对各种变形题目以及将相关思路拓展应用到其他未接触过的领域,提升在限时条件下解决复杂问题的能力,为应对竞赛或者面试中的难题做好准备。
      • 刷题范围:挑战高难度的算法竞赛真题、知名企业面试中的编程难题以及具有创新性和综合性的题目,例如那些将复杂数学运算与高级字符串处理技巧融合到动态规划、图论等复杂算法中的题目。可以参加线上的算法竞赛模拟赛、刷题打卡活动等,或者在 MarsCode AI 刷题中专门挑战高难度题目集。
      • 时间安排:每周安排 2 - 3 天,每天 3 - 4 小时用于高难度刷题。每次完成 1 - 2 道题,因为高难度题目往往需要花费大量时间去分析思考和尝试不同解法,所以要注重解题过程中的思路拓展和方法优化,多参考优秀的解题代码和思路解析,与其他刷题者交流讨论,拓宽自己的思维视野,同时对自己知识体系中的薄弱环节进行重点突破,通过专项练习和深入学习不断完善自己的知识储备和解题能力。
  • 利用错题进行针对性学习

    • 错题整理:建立电子错题本或者纸质错题本,将做错的题目按照知识点模块(如分数运算错误、字符串拼接错误等)、错误类型(思路错误、代码实现错误、细节遗漏等)进行分类整理,详细记录题目内容、自己的错误解法、正确解法以及错误原因分析,并且标注出涉及的知识点和需要重点复习的地方,例如如果是因为对同分母分数运算的代码实现逻辑不清导致错误,就重点标注这一知识点需要重新学习巩固。
    • 定期复习与分析:每周安排固定时间(如周末 1 - 2 小时)复习错题,重新做一遍错题,看是否能够正确解答,如果再次做错,仔细分析是之前的错误原因没有彻底解决,还是又出现了新的问题,对于仍然存在的知识漏洞或者解题思维误区进行重点标记,然后针对这些问题进行专项学习,可以重新查阅教材、观看相关知识点的讲解视频或者请教老师、同学等,确保彻底掌握相关知识点,避免下次再犯同样的错误。
    • 举一反三与拓展:在掌握错题的正确解法后,思考这道错题涉及的知识点还能如何在其他题目场景中运用,尝试对题目进行变形,自己出题并解答,例如改变本题中分数运算的条件(如变成异分母分数运算、涉及约分等情况)、字符串拼接的格式要求等,通过这种方式加深对知识点的理解深度和运用的灵活性,真正做到举一反三,提高自己的解题能力。

工具运用

  • 与教材结合:在使用 AI 刷题时,可以搭配一本涵盖基础编程知识以及数学运算在编程中应用的教材,比如《Python 编程从入门到实践》(如果使用 Python 语言的话)、《Java 核心技术》(针对 Java 语言)等。在刷题前,先通过教材学习相关知识点的理论内容,例如基本数据类型的详细介绍、各种数学运算的语法和规则、字符串的处理方法等,构建扎实的知识基础。然后在刷题过程中,如果遇到对某个知识点理解模糊或者不清楚的地方,及时返回教材中对应的章节进行深入复习,加深理解,让刷题有更坚实的理论支撑。同时,教材中的例题和练习题可以作为补充练习,进一步巩固所学知识点,帮助自己更好地将理论知识应用到实际解题中。
  • 与在线课程互动:报名参加一些优质的在线编程课程,例如慕课网、网易云课堂上的相关课程。在课程学习过程中,老师会讲解知识点以及通过示例题目演示解题思路,此时可以结合 AI 刷题功能,在课后去查找相同知识点或者相似题型的题目进行练习巩固。同时,如果在刷题时遇到难题或者有疑问,可以在课程的答疑社区或者交流群里向老师和其他同学请教,获取更多的思路和帮助,也可以将自己通过 AI 刷题总结出的独特解题方法分享出来,互相学习交流,提高学习效果。另外,在线课程中往往会布置一些课后作业和项目实践,通过认真完成这些任务,可以将所学知识应用到实际场景中,加深对知识点的理解和掌握程度。
  • 与开源项目学习协同:在 GitHub 等平台上搜索一些与数学运算、字符串处理相关的开源项目,这些项目往往会在实际代码中运用到各种相关的编程技巧。在学习过程中,可以一边通过 AI 刷题提升编程解题能力,一边去阅读开源项目中的代码,分析其中是如何运用所学的数学运算和字符串处理方法的,比如在一个数据格式化项目中如何准确地进行分数运算和按照特定格式拼接字符串等。通过这种方式,将理论知识与实际项目中的应用相结合,更好地理解编程技巧的实用价值,进一步提高自己的编程实践能力。同时,还可以参与开源项目的开发,通过实际贡献代码,锻炼自己的编程技能,并且从其他开发者的代码中学习到更多优秀的编程习惯和应用技巧