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函数的时间复杂度,所以不知道时间复杂度)

 

转载于:https://www.cnblogs.com/fangxiaoqi/p/10362174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值