小O有一个整数 n ,她每次可以进行以下操作之一: 1. 将 n 减去 1 ; 2. 将 n 除以 k (当 n 可以被 k 整除时)。 小O想知道,将 n 变成 m 至少需要多少次操作。
在一行上输入三个整数 n,m 和 k( 1 ≤ m ≤ n ≤ 10^9;1 ≤ k ≤ 10^9 ) 表示初始数字、目标数字和 可以除的数字。
在一行上输出一个正整数,表示将 n 变成 m 至少需要多少次操作。
10 4 2
2
考点:贪心 · 基础数学
限制 1 秒 / 256MB | 标准输入输出
推荐方向:贪心
每一步都取当前最优,靠问题性质保证局部最优能拼成全局最优。
思路框架(贪心 通法 · 非本题专属)
实现要点:贪心题关键在于排序规则:按什么关键字排序决定了策略是否正确。
复杂度:时间 O(n log n)(含排序) | 空间 O(1) ~ O(n)
该范式的通法易错点
对照本题
样例 1:输入 10 4 2 → 输出 2
先将 10 除以 2 得到 5,再将 5 减去 1 得到 4,共需要 2 次操作。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2024年秋招-OPPO-AI/算法岗笔试。