P1028 数的计算
1.思路(自己想出来的)
直接用递归,分别求每个数的次数
如
f(1)=1 1就是那个数本身,也要计算在内
f(2)=f(1)+1
f(3)=f(1)+1
f(4)=f(1)+f(2)+1
f(5)=f(1)+f(2)+1
f(n)=f(1)+…f(n/2)+1
2.源码
//时间复杂度过高 n的n次方
#include<stdio.h>
int sum(int x){
int result=0;
if(x==1) return 1;
for(int i=1;i<=x/2;i++)
result+=sum(x);
return result+1;
}
int main(){
int n;
scanf("%d",&n);
printf("%d",sum(n));
时间复杂度过高,n的n次方
}
1.思路(大佬的)
就是在我的基础,多了一个记忆数组,就是求某个数时
例f(5)
f(5)=(1)+f(2)
进入函数后 a[5]=f(5)+1
#include<stdio.h>
int a[1005];
int f(int x){
int result=0;
if(x==1) return 1; //即f(1)==1
if(a[x]) return a[x];
for(int i=1;i<=x/2;i++)
result+=f(i);
return a[x]=result+1; //用数组存每个数
}
int main(){
int n;
scanf("%d",&n);
printf("%d",f(n));
}