酷代码 AI
菜单

c++城主在生日的时候,会把自己的生日蛋糕分给城里的小朋友。每年会把蛋糕分成当时年龄的数量,因为城主也喜欢吃蛋糕,所以他每年都会给自己留一块,把剩下的分出去。现在城主刚过完150岁的生日,已经分出去了n块蛋糕。 请你编写程序计算一下城主是是从几岁开始养成这个习惯的。(数据保证 n 一定有解,且最值答案大于1) 输入: 输入包括一行,包含一个整数n,表示城主到现在为止总共分出的蛋糕的数量。 输出: 输出包括一行,包含一个整数,表示城主开始有这个习惯的年龄。 输入样例: 1: 149 输出样例: 1: 150 输入样例: 2: 11039 输出样例: 2: 18

以下是解决该问题的 C++ 代码: ```cpp #include <iostream> using namespace std; int main() { int n; // 从输入读取总共分出的蛋糕数量 cin >> n; // 从 2 岁开始尝试,因为题目要求起始年龄大于 1 for (int startAge = 2; startAge <= 150; startAge++) { int totalGiven = 0; // 计算从 startAge 到 150 岁分出的蛋糕总数 for (int age = startAge; age <= 150; age++) { totalGiven += age - 1; } // 如果计算出的总数等于输入的 n,则找到起始年龄 if (totalGiven == n) { cout << startAge << endl; break; } } return 0; } ``` 代码解释: 1. 输入读取:使用 `cin` 从标准输入读取一个整数 `n`,表示城主到现在为止总共分出的蛋糕的数量。 2. 起始年龄尝试:使用一个外层 `for` 循环从 2 岁开始尝试不同的起始年龄 `startAge`,直到 150 岁。 3. 计算分出的蛋糕总数:对于每个起始年龄 `startAge`,使用一个内层 `for` 循环从 `startAge` 到 150 岁,计算每年分出的蛋糕数量(年龄减 1)并累加到 `totalGiven` 中。 4. 检查是否匹配:如果计算出的 `totalGiven` 等于输入的 `n`,则输出当前的起始年龄 `startAge` 并使用 `break` 语句跳出外层循环。 复杂度分析: - 时间复杂度:$O(m^2)$,其中 $m$ 是最大年龄(这里是 150)。因为有两层嵌套的 `for` 循环。 - 空间复杂度:$O(1)$,只使用了常数级的额外空间。 [2026-01-30 20:30:40 | AI问答 | 475点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多