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

束缚激光能量补充时间计算C++实现

根据题意,每秒补充的能量是第i秒补充1+2+...+i点能量,即第i秒补充i(i+1)/2点能量。总补充能量是前t秒的能量和,即Σ_{i=1}^{t} i(i+1)/2。需要找到最小的t,使得总能量≥n。 计算总和公式:Σ i(i+1)/2 = (1/2)Σ(i²+i) = (1/2)(Σi² + Σi) = (1/2)(t(t+1)(2t+1)/6 + t(t+1)/2) = t(t+1)(t+2)/6。 因此需要找到最小的t,满足 t(t+1)(t+2)/6 ≥ n。 直接循环从t=1开始,每次累加当前秒补充的能量,直到总能量≥n。因为n≤30000,t不会太大(约44秒内,因为44*45*46/6≈15180,45*46*47/6≈16215,实际上需要更大,但循环足够快)。 以下为C++代码实现: ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; int total = 0; int t = 0; while (total < n) { t++; total += t * (t + 1) / 2; } cout << t << endl; return 0; } ``` 测试样例: - 输入1000,计算:t=17时总和为17*18*19/6=969,t=18时总和为18*19*20/6=1140≥1000,输出18。 - 输入2000,t=21时总和为21*22*23/6=1771,t=22时总和为22*23*24/6=2024≥2000,输出22。 代码简洁高效,符合题目要求。 ######[AI问答 | 438点数解答 | 2026-08-08 19:19:31]

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