小F的永久代币回收计划

84 阅读2分钟

问题描述

小F最近迷上了玩一款游戏,她面前有一个永久代币卡的购买机会。该卡片的价格为 a 勾玉,每天登录游戏可以返还 b 勾玉。小F想知道她至少需要登录多少天,才能让购买的永久代币卡回本。


测试样例

样例1:

输入:a = 10, b = 1
输出:10

样例2:

输入:a = 10, b = 2
输出:5

样例3:

输入:a = 10, b = 3
输出:4

题目分析

  1. 问题情境
    • 小F面临购买永久代币卡的决策,已知卡片价格为(a)勾玉,且每天登录游戏可返还(b)勾玉。
    • 目标是求出小F至少需要登录多少天能让购买的永久代币卡回本,也就是使返还的勾玉总数达到或超过购买卡片花费的勾玉数。
  2. 输入与输出
    • 输入:给定两个整数(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);
    }
}

解题思路

  1. 关键思路
    • 要确定回本所需的天数,只需用卡片的价格除以每天返还的勾玉数即可。但需要注意的是,如果除不尽,那么天数应该向上取整,因为只有登录完整的天数后才能真正回本。
  2. 数学原理
    • 设需要登录的天数为(x),根据题目条件可得到等式(bx \geq a)(这里的“(\geq)”是因为要达到或超过购买卡片的花费才算回本)。
    • 求解(x),则(x \geq \frac{a}{b})。

测试样例分析

  1. 样例1
    • 输入:(a = 10),(b = 1)。
    • 分析:根据公式(x \geq \frac{a}{b}),此时(\frac{a}{b} = \frac{10}{1} = 10),刚好整除,所以小F需要登录(10)天就能回本。
    • 输出:(10),与预期相符。
  2. 样例2
    • 输入:(a = 10),(b = 2)。
    • 分析:计算(\frac{a}{b} = \frac{10}{2} = 5),整除,小F需要登录(5)天可回本。
    • 输出:(5),符合预期。
  3. 样例3
    • 输入:(a = 10),(b = 3)。
    • 分析:(\frac{a}{b} = \frac{10}{3} \approx 3.33),向上取整后为(4),即小F至少需要登录(4)天才能回本。
    • 输出:(4),与预期一致。