问题描述
小F最近迷上了玩一款游戏,她面前有一个永久代币卡的购买机会。该卡片的价格为 a 勾玉,每天登录游戏可以返还 b 勾玉。小F想知道她至少需要登录多少天,才能让购买的永久代币卡回本。
测试样例
样例1:
输入:
a = 10, b = 1
输出:10
样例2:
输入:
a = 10, b = 2
输出:5
样例3:
输入:
a = 10, b = 3
输出:4
题目分析
- 问题情境:
- 小F面临购买永久代币卡的决策,已知卡片价格为(a)勾玉,且每天登录游戏可返还(b)勾玉。
- 目标是求出小F至少需要登录多少天能让购买的永久代币卡回本,也就是使返还的勾玉总数达到或超过购买卡片花费的勾玉数。
- 输入与输出:
- 输入:给定两个整数(a)和(b),分别代表永久代币卡的价格(单位:勾玉)和每天登录游戏返还的勾玉数。
- 输出:一个整数,表示小F至少需要登录的天数,使得购买的永久代币卡能够回本。
完整代码
import math
# 读取输入的卡片价格a和每天返还勾玉数b
a, b = map(int, input().split())
# 计算回本所需天数,使用math.ceil向上取整
days_needed = math.ceil(a / b)
print(days_needed)
public class Main {
public static int solution(int a, int b) {
// write code her
int r = 0;
if(a % b != 0) {
r = 1;
}
return a / b + r;
}
public static void main(String[] args) {
System.out.println(solution(10, 1) == 10);
System.out.println(solution(10, 2) == 5);
System.out.println(solution(10, 3) == 4);
}
}
解题思路
- 关键思路:
- 要确定回本所需的天数,只需用卡片的价格除以每天返还的勾玉数即可。但需要注意的是,如果除不尽,那么天数应该向上取整,因为只有登录完整的天数后才能真正回本。
- 数学原理:
- 设需要登录的天数为(x),根据题目条件可得到等式(bx \geq a)(这里的“(\geq)”是因为要达到或超过购买卡片的花费才算回本)。
- 求解(x),则(x \geq \frac{a}{b})。
测试样例分析
- 样例1:
- 输入:(a = 10),(b = 1)。
- 分析:根据公式(x \geq \frac{a}{b}),此时(\frac{a}{b} = \frac{10}{1} = 10),刚好整除,所以小F需要登录(10)天就能回本。
- 输出:(10),与预期相符。
- 样例2:
- 输入:(a = 10),(b = 2)。
- 分析:计算(\frac{a}{b} = \frac{10}{2} = 5),整除,小F需要登录(5)天可回本。
- 输出:(5),符合预期。
- 样例3:
- 输入:(a = 10),(b = 3)。
- 分析:(\frac{a}{b} = \frac{10}{3} \approx 3.33),向上取整后为(4),即小F至少需要登录(4)天才能回本。
- 输出:(4),与预期一致。