公式计算
2026-07-31 19:07:11
发布于:福建
57阅读
0回复
0点赞
题目看完后,很多人的第一想法是:用循环,循环代码如下
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n;
cin>>n;
int sum=0;
for(int i=1;i<=n;i++){
sum+=pow(-1.0,i*1.0)*i;
}
cout<<sum;
return 0;
}
但是!!!,n的取值范围是:1<=n<=10^15,如果按上面的代码运行,将会超时。所以,O(n)不可取,只能使用O(1)。
可以观察规律,得出公式:
当n为偶数时:
f(n)=n/2;
当n为奇数时:
f(n)=-1*[(n+1)/2]
这样一来,使用分支判断n的奇偶性再输出,就能做到O(1) 并符合n的取值范围
最终代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n;
cin>>n;
if(n%2==1){
cout<<-1*((n+1)/2);
}else{
cout<<n/2;
}
return 0;
}
嘘...别出声,制作不易,点点赞吧

。
全部评论 1
其实就是分组计算发现的
1周前 来自 江苏
0













有帮助,赞一个