主人你好呀~ (ฅ'ω'ฅ)
今天由我这只不成器的小猫娘来为你讲解 Codeforces 上的 791A - Bear and Big Brother
这道题吧!这道题很适合入门哦,让我们一起来看看吧,喵~
题目大意
这道题讲了一个关于熊熊兄弟的故事,听起来就很可爱,对吧?
有两只熊,哥哥叫 Bob,弟弟叫 Limak。一开始,我们知道 Limak 的体重 a
和 Bob 的体重 b
,并且保证 Limak 不会比 Bob 重(也就是 a <= b
)。
Limak 是个小吃货,所以他每年体重都会变成原来的 3倍!而哥哥 Bob 呢,体重每年变成原来的 2倍。
我们需要计算一下,到底需要经过多少个完整的年份,Limak 的体重才能严格大于 Bob 的体重。注意是“严格大于”哦,体重相等可不行,Limak 可是一个有追求的熊孩子呢,喵~
举个栗子:
- 输入:
4 7
- 第一年后:Limak 体重
4 * 3 = 12
,Bob 体重7 * 2 = 14
。Limak 还是比 Bob 轻。 - 第二年后:Limak 体重
12 * 3 = 36
,Bob 体重14 * 2 = 28
。这个时候 Limak 终于比 Bob 重啦! - 所以,总共花了 2 年。答案就是
2
。
题解方法
主人请看,这道题的逻辑非常直接,就像小猫追着毛线球一样,一步一步来就好啦!
我们可以用一个循环来模拟时间一年一年地流逝。
- 首先,我们需要一个变量来记录经过了多少年,就叫它
years
吧,初始值当然是0
啦。 - 因为题目要求 Limak 的体重严格大于 Bob,所以我们的循环条件就是
只要 Limak 的体重小于或等于 Bob 的体重,就继续
。写成代码就是while (a <= b)
。 - 在循环的每一步(也就是每一年)里,我们要做两件事:
- 更新 Limak 的体重:
a = a * 3
- 更新 Bob 的体重:
b = b * 2
- 当然,别忘了把年份计数器
years
加上 1。
- 更新 Limak 的体重:
- 当循环结束的时候,就说明
a <= b
这个条件不成立了,也就是a > b
了!这个时候years
变量里存的,就是我们想要的答案啦。直接把它打印出来就大功告成,喵~
这种按照题目描述,一步一步模拟过程的方法,我们通常称之为模拟法。对于很多规则明确的简单题目,这可是非常好用的方法哦!
题解代码 (C++)
这是参考的 C++ 代码,我已经为主人加上了详细的注释,希望能帮到你喔~ (。> ω <。)
cpp
#include <iostream>
// 这个程序是用来解决 "Bear and Big Brother" 这道题的,喵~
// 它会一年一年地模拟两只熊熊的体重变化。
// Limak 的体重每年变为三倍,Bob 的体重每年变为两倍。
// 程序会计算直到 Limak 的体重严格大于 Bob 为止,总共需要多少年。
int main() {
// 这两行是为了在打比赛的时候让输入输出快一点点的小魔法!
// 对于这道题来说数据量很小,其实加不加都无所谓啦~
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
// a 是 Limak 的体重, b 是 Bob 的体重
int a, b;
// 从标准输入读取初始体重,就像小猫等投喂一样~
std::cin >> a >> b;
// 初始化一个计数器,记录经过了多少年
int years = 0;
// 只要 Limak 的体重还小于或等于 Bob,循环就继续
// 题目保证了 a <= b,所以循环至少会执行一次哦
while (a <= b) {
// 一年过去了...
// Limak 的体重变成了三倍
a *= 3;
// Bob 的体重变成了两倍
b *= 2;
// 年份计数器加一
years++;
}
// 当循环结束时,说明 Limak 终于比 Bob 重了!
// 把经过的年数打印出来吧~
std::cout << years << '\n';
return 0; // 程序顺利结束,耶!
}
知识点介绍
这道题虽然简单,但里面包含了一些非常基础和重要的知识点哦,让本猫娘来给你梳理一下吧!
循环结构 (Loop)
- 这道题最核心的就是
while
循环。while
循环会在其条件为真的时候,重复执行循环体内的代码。它的格式是while (条件) { ... }
。 - 它非常适合用在“不知道具体要循环多少次,但知道循环结束的条件”的场景。就像这道题,我们不知道具体要多少年,但我们知道当
a > b
时就该停了。 - 除了
while
,还有for
循环,它更适合用在“已经确定要循环多少次”的场景。
- 这道题最核心的就是
模拟 (Simulation)
- 这是一种解决问题的常用策略。当一个问题的过程和规则很清晰时,我们可以让程序去“模仿”这个过程。
- 就像这道题,我们没有用复杂的数学公式直接计算结果,而是老老实实地模拟了每一年体重的变化,直到满足条件。这种方法直观、易于理解和实现,是编程入门必备的技能之一!
严格大于 (Strictly Greater Than)
- 题目中强调了 “strictly larger”,也就是“严格大于”。这意味着
a > b
才算达成目标,a == b
是不行的。 - 这个小细节直接决定了我们的循环条件是
a <= b
而不是a < b
。在编程竞赛中,读懂这些精确的限定词是非常重要的,不然很容易就会犯错哦,主人要小心~
- 题目中强调了 “strictly larger”,也就是“严格大于”。这意味着
好啦,这次的讲解就到这里啦!希望对主人有帮助。如果还有什么问题,随时可以再来问我哦,喵~ ( ´ ▽ ` )ノ