P1035 调和级数

 

 

 

 

两种解法如下:

 

1.模拟

这种做法的思路是枚举n从1开始,直到Sn>k结束,只需要一个循环即可实现。

代码:

 

1 #include<cstdio>
2 int main() {
3     int k,n=0;
4     scanf("%d",&k);
5     for(double Sn=0;Sn<=k;++n,Sn+=1.0/n);
6     printf("%d",n);
7     return 0;
8 }

 

空间复杂度O(1)  

时间复杂度  O(e^kγ)(求法见做法2)

(如果那个γ可以约去的话,应该是O(e^k),但并不知道可不可以约去)

 

 

 

代码:

 1 #include<cstdio>
 2 #include<cmath>
 3 const double gamma=0.5772156649;
 4 int main() {
 5     int k,n;
 6     scanf("%d",&k);
 7     n=exp(k-gamma)+0.5;
 8     printf("%d",n);
 9     return 0;
10 }

空间复杂度O(1)

(因为不知道math.h头文件中的exp函数的时间复杂度,所以不知道时间复杂度)

 

posted @ 2019-02-11 16:07  cruelty_angel  阅读(309)  评论(0编辑  收藏  举报