C++ 实现:判断苏西与灵兽能否成守护伙伴,附代码详解与复杂度分析
以下是实现该功能的 C++ 代码: ```cpp #include <iostream> using namespace std; int main() { // 定义变量来存储灵兽现在的体型、苏西的体型和苏西携带的蘑菇数量 int x, y, n; cin >> x >> y >> n; // 初始化每次吃蘑菇的数量为 11 int mushroomCount = 11; // 模拟灵兽吃蘑菇的过程 while (n >= mushroomCount) { // 灵兽吃蘑菇后体型缩小一半(向下取整) x /= 2; // 苏西使用相应数量的蘑菇 n -= mushroomCount; // 判断灵兽体型是否小于苏西的体型 if (x < y) { break; } // 下一次吃的蘑菇数量变为上一次的两倍 mushroomCount *= 2; } // 输出结果 if (x < y) { cout << x << " " << n << endl; } else { cout << x << " 0" << endl; } return 0; } ``` 代码解释 1. 输入处理:使用 `cin` 读取三个整数 `x`、`y` 和 `n`,分别表示灵兽现在的体型、苏西的体型和苏西携带的蘑菇数量。 2. 初始化:初始化 `mushroomCount` 为 11,表示灵兽第一次吃蘑菇的数量。 3. 模拟吃蘑菇过程:在 `while` 循环中,只要苏西携带的蘑菇数量足够,就继续让灵兽吃蘑菇。每次吃蘑菇后,灵兽的体型缩小一半,苏西的蘑菇数量减少相应值。如果此时灵兽体型小于苏西体型,跳出循环。每次循环结束后,下一次吃的蘑菇数量翻倍。 4. 输出结果:根据最终的判断,输出对应的 `a` 和 `b` 值。 复杂度分析 - 时间复杂度:由于每次吃蘑菇后,下一次吃的蘑菇数量翻倍,所以循环的次数是 $O(log n)$,其中 $n$ 是苏西携带的蘑菇数量。 - 空间复杂度:代码只使用了常数级的额外空间,复杂度为 $O(1)$。 ######[AI问答 | 527点数解答 | 2025-05-30 16:17:03]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)366
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)248
- C++求解序列或与运算和差值:避O(nq)复杂度及数据处理要点(字节豆包 | 534点数解答 | 2025-10-17 20:05:07)70
- JS 代码:判断“red”改值为“green”并弹窗显示结果( | 176点数解答 | 2024-05-20 21:33:04)429
- 用 JS 代码巧妙判断 a 与 b 关系:输出对应结果 ( | 47点数解答 | 2024-05-20 22:10:14)337
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)336
- Java 实现:轻松生成 5 位数字、大小写字母混合验证码( | 266点数解答 | 2024-03-06 17:39:10)344
- 深度剖析:游戏中两个 Buff 效果的触发条件、逻辑及注意要点 (阿里通义 | 566点数解答 | 2024-11-26 14:24:12)270
- 深度剖析 Vue 2 插槽:从基础使用到高级玩法(字节豆包 | 165点数解答 | 2024-11-29 11:25:06)226
- C++实现支持四则运算的简单计算器,处理除数为0和无效操作(字节豆包 | 241点数解答 | 2025-10-29 20:21:29)76
- C语言破解甲乙丙真假话谜题:开发中需留意的三大要点(字节豆包 | 444点数解答 | 2025-11-24 00:10:58)66
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)490