问题描述
小F最近迷上了玩一款游戏,她面前有一个永久代币卡的购买机会。该卡片的价格为 a 勾玉,每天登录游戏可以返还 b 勾玉。小F想知道她至少需要登录多少天,才能让购买的永久代币卡回本。
测试样例
样例1:
输入:a = 10, b = 1
输出:10
样例2:
输入:a = 10, b = 2
输出:5
样例3:
输入:a = 10, b = 3
输出:4
解题思路
题目要求计算小F需要登录多少天才能让购买的永久代币卡回本。具体来说,小F需要通过每天登录游戏返还的勾玉来抵消购买卡片的花费。我们可以通过简单的除法运算来解决这个问题。设购买卡片的价格为 a 勾玉,每天返还 b 勾玉,那么需要的天数 d 可以通过公式 d=⌈ba⌉ 来计算。由于直接计算向上取整比较麻烦,我们可以通过 (a+b−1)//b 来实现向上取整的效果。
时间复杂度:O(1)。因为计算过程只涉及一次简单的除法运算,时间复杂度为常数级别。
空间复杂度:O(1)。只使用了常数级别的额外空间。
代码
方法1:利用math功能包
功能包里有个math.ceil(a / b):计算 a / b 并向上取整,得到需要的天数。
import math
def solution(a: int, b: int) -> int:
# 计算需要的天数
days = math.ceil(a / b)
return days
if __name__ == '__main__':
print(solution(10, 1) == 10)
print(solution(10, 2) == 5)
print(solution(10, 3) == 4)
方法2:不利用任何功能包
def solution(a: int, b: int) -> int:
return (a + b - 1) // b
if __name__ == '__main__':
print(solution(a = 10, b = 1) == 10)
print(solution(a = 10, b = 2) == 5)
print(solution(a = 10, b = 3) == 4)