题目描述
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
输入
键盘输入 k
输出
屏幕输出 n
样例输入
1
样例输出
2
提示
来源
代码示例一:
#include<stdio.h>
int main()
{
double s=0,k,n;
scanf("%lf",&k);
for(n=1;s<=k;n++)//注意:当for循环中的表达式二(s<=k)执行之,
{ //不论表达式二的值为真还是假,都会去执行表达式三(n++)
s=s+1/n;
}
printf("%.0lf",n-1);//因此最后应将n-1才是需要的结果(因为在for循环体的表达式列表里进行判断,并且判断结果为假之后多加了一次嘛!)
}
代码示例二:我们也可以不用for循环的表达式二进行判断,在for循环中再加一个判断语句,虽然这样显得麻烦一点儿,但是理解起来要简单一点儿,当然如果你会调试代码并且会单步追踪程序代码执行结果的话,那也可以使用代码示例一,多追踪几遍,看看程序如何运行的。
#include<stdio.h>
int main()
{
double s=0,k,n;
scanf("%lf",&k);
for(n=1;;n++)
{
s=s+1/n;
if(s>k)
{
break;
}
}
printf("%.0lf",n);
}