方向一刷题10学习方法与心得 | 豆包MarsCode AI刷题

86 阅读3分钟

题目解析

思路: 核心思路是根据永久代币卡的购买价格 a 勾玉以及每天登录游戏返还的 b 勾玉数量,来计算出需要登录多少天才能回本。回本意味着返还的勾玉总数达到或超过购买卡片花费的 a 勾玉。 首先判断 a 是否能被 b 整除,如果能整除,那么直接用 a 除以 b 得到的商就是需要登录的天数,因为刚好经过这么多天返还的勾玉就等于购买价格了。 如果 a 不能被 b 整除,说明按照整除得到的天数还不能回本,还需要再多一天才能让返还的勾玉总数超过购买价格,所以要在 a // b 的基础上加 1,采用向上取整的方式来确定最终需要登录的天数。 例如样例 1 中,a = 10b = 1: 首先判断 10 % 1,余数为 0,说明 10 能被 1 整除。 - 按照思路,直接计算 10 // 1 = 10,也就是需要登录 10 天,这 10 天每天返还 1 勾玉,刚好可以回本。 - 再看样例 3 中,a = 10b = 3: 计算 10 % 3,余数为 1,表明 10 不能被 3 整除。 - 先计算 10 // 3 = 3,但经过 3 天返还的勾玉总数是 3×3 = 9 勾玉,还没有回本,所以需要再加上 1 天,总共就是 3 + 1 = 4 天,经过这 4 天,返还的勾玉数量为 4×3 = 12 勾玉,就超过了购买价格,可以回本了。

image.png 代码详解if a % b == 0::这里使用取余运算符 % 来判断 a 是否能被 b 整除,如果余数为 0,则表示能整除。 return a // b:当 a 能被 b 整除时,直接使用整除运算符 // 计算出 a 除以 b 的商,这个商就是刚好回本需要登录的天数,然后将其返回。 - return a // b + 1:当 a 不能被 b 整除时,先通过 a // b 得到商,由于此时按照这个商对应的天数返还的勾玉还不够回本,所以需要再加 1 天,采用向上取整的方式,将 a // b + 1 的结果作为最终需要登录的天数并返回。

知识总结

新知识点梳理与理解

取余运算和整除运算的应用场景:本题清晰展示了取余运算(%)和整除运算(//)在实际问题中的配合使用。取余运算用于判断两个数之间是否存在整除关系,而整除运算则用于在整除情况下直接获取天数或者作为向上取整计算的基础部分。在很多涉及数量分配、周期计算等问题中,常常会用到这两种运算来判断情况和计算结果,比如计算分组后剩余的物品数量(用取余)以及平均分组的组数(用整除)等场景。

向上取整的逻辑实现:在代码中通过 a // b + 1 的方式实现了向上取整的效果,当除法运算结果有余数时,就额外增加 1 来确保满足条件。这种向上取整的思路在很多资源分配、时间计算等实际问题中很常见,例如计算完成某项任务至少需要几个时间段,当按常规计算出现余数时,就需要多安排一个时间段,也就是向上取整的概念。

对入门同学的学习建议

在向上取整方面:自己构造一些需要向上取整的场景,比如模拟购买一定价格的商品,每天攒固定金额的钱,计算至少需要几天能攒够钱,通过手动计算和编写代码实现,对比不同情况下向上取整的必要性以及代码实现方式,掌握这种在实际编程中处理不能整除情况的常用思路。