考察:简单的循环,判断
代码1:使用for循环,if语句判断条件。需注意s的数据类型为浮点型。
#include<bits/stdc++.h> using namespace std; int main() { int n,k;//n是所求值,k整数,s和 double s=0; cin>>k;//输入k值 for(n=1;;n++) { s+=1.0/n; if(s>k) { cout<<n; break; } } return 0; }
代码2:对代码1中的for循环进行简化整合
#include<bits/stdc++.h> using namespace std; int main() { int n,k;//n是所求值,k整数,s和 double s=0; cin>>k;//输入k值 for(n=0;s<=k;++n,s+=1.0/n); cout<<n; return 0; }
代码3:while循环(do while 循环同理),注意n的初始值,及n++和++n的区别。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n=0,k;//n是所求值,k整数,s和
double s=0;
cin>>k;//输入k值
while(s<=k)
{
++n;
s+=1.0/n;
}
cout<<n;
return 0;
}
代码4:利用调和级数,已知求调和级数有限多项和的表达式为
,我们拿过来用即可。(
等于0.5772156649)故当s>k时,
,化简得
;我们只需求满足上式的最小的n,所以
(四舍五入),
#include<bits/stdc++.h>
using namespace std;
const double r=0.5772156649;
int main()
{
int k,n;
cin>>k;
n=exp(k-r)+0.5;
cout<<n;
return 0;
}