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