如题
第一种方式当然是暴力
第二种是看数列规律,1+22+33+…
代码
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<deque>
#include<queue>
#include<stack>
#include<cstdlib>
#include<vector>
#include<cstring>
#include<map>
using namespace std;
typedef long long LL;
const int MOD = 1e9+7, INF = 0x3f3f3f3f;
LL cnt[10005];
void init()
{
for (int i = 1; i <= 10000; i++) {
cnt[i] = i * (i + 1) / 2;
}
}
int main()
{
init();
int n;
while(~scanf("%d", &n)) {
int p = lower_bound(cnt, cnt+n, n) - cnt;
LL ans = 0;
for (int i = 1; i < p; i++) {
ans += i * i;
}
ans += (n - cnt[p-1]) * p;
cout << ans << endl;
}
return 0;
}

本文探讨了数列求和的两种方法:暴力求解与规律观察法,并提供了一段C++代码实现。通过预计算数列的部分和,能够在O(1)时间内找到数列中不超过给定值的最大项,进而快速计算出最终结果。

2069

被折叠的 条评论
为什么被折叠?



