思路:这一题我首先用的是递归做的,然后发现超时了,然后我就简单的用一个for循环来做
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
if(n<0) break;
long long int f[100002],i;
f[0]=0;
f[1]=1;
for(i=2;i<=n;i++){
if(i%3==0)
f[i]=f[i-1]+i*i*i;
else
f[i]=f[i-1]+i;
}
printf("%lld\n",f[n]);
}
return 0;
}
然后发现也超时了,
然后看别人的代码发现:
#include<stdio.h>
int main(){
int n;
long long int f[100002],i;
f[0]=0;
f[1]=1;
for(i=2;i<=100000;i++){
if(i%3==0)
f[i]=f[i-1]+i*i*i;
else
f[i]=f[i-1]+i;
}
while(scanf("%d",&n)!=EOF){
if(n<0) break;
printf("%lld\n",f[n]);
}
return 0;
}
要把scanf放在最后面那里才不会超时,然后n也要改为100000;原因我也不是很清楚,哈哈哈哈!!!