酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++ 实现灵石开门问题:最少灵石数量计算

根据题目描述,我们需要找出最小的 n,使得前 n 个自然数的和大于 m。这是一个典型的数列求和问题。 以下是 C++ 实现代码: ```cpp #include <iostream> using namespace std; int main() { int m; cin >> m; int sum = 0; int n = 0; while (sum <= m) { n++; sum += n; } cout << n << endl; return 0; } ``` **代码解释:** - `sum` 记录当前已放入灵石的总能量 - `n` 记录已放入的灵石数量 - 循环中每次增加一颗灵石,直到总能量超过 m - 注意:每颗灵石的能量值等于它的序号(第 i 颗能量为 i),所以每次累加的是当前的序号 n **优化版本(直接公式计算):** ```cpp #include <iostream> #include <cmath> using namespace std; int main() { int m; cin >> m; // 解不等式 n(n+1)/2 > m // 得到 n > (-1 + sqrt(1 + 8*m)) / 2 double n = (-1 + sqrt(1 + 8.0 * m)) / 2; int result = (int)ceil(n); cout << result << endl; return 0; } ``` ######[AI问答 | 320点数解答 | 2026-07-11 19:22:33]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]