以下是实现该功能的 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)$。 [2025-05-30 16:17:03 | AI问答 | 527点数解答]