洛谷T664741 题解

(我也就会写点水题了)

问题分析

  • 小 C 初始能力值为 a,目标是达到或超过 b(a < b)
  • 每天可以选择两种训练方式:普通训练( + k )或加训( * k )
  • 需要计算最少需要多少天才能达到目标

程序逻辑

  1. 首先处理特殊情况:当 k=1 时,只能选择普通训练(因为 ×1 不会改变值),所以需要 (b-a) 天

  2. 当 k>1 时,采用两步策略:

  • 先通过普通训练使能力值达到或超过 k
  • 之后全部使用加训( * k ),因为此时乘法增长比加法更快

AC代码

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int a,b,k,ans=0;
int main(){
	scanf("%d%d%d",&a,&b,&k);
	if(k==1){
		printf("%d",b-a);
		return 0;
	}
	while(a<k){
		ans++;a+=k;
	}
	while(a<b){
		ans++;a*=k;
	}
	printf("%d",ans);
	return 0;
}

代码解释

  • 变量定义:a(初始值)、b(目标值)、k(增长参数)、ans(天数计数)
  • 输入处理:读取 a、b、k 的值
  • 特殊情况处理:当 k=1 时直接计算 b-a 并输出
  • 第一阶段循环:当 a < k 时,持续进行普通训练(+k),累加天数
  • 第二阶段循环:当 a < b 时,持续进行加训(×k),累加天数
  • 输出最终的天数计数 ans
posted on 2025-09-13 17:12  Chronomia  阅读(9)  评论(0)    收藏  举报