题目描述
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
输入输出格式
输入格式:
一个正整数K
输出格式:
一个正整数N
做此题时思路非常清晰:利用循环求出n输出即可。但实际操作时遇到了一些问题。
1. 若用for循环,不知结束的条件,故需尽可能大的找出i的值,即for(int i=1;i<=100000000;i++),然后求出Sn>K时的最小的n后进行break;
但我们可以直接使用while循环,循环条件写Sn<K(注)
2.第一次提交时,发现是WA,遂参考题解,发现Sn应为浮点数类型而非整型,因为有分数
3.第二次提交时,发现1/i不是浮点数,故应改为1.0/i
注:条件应为Sn<=K,因为当K=1时,应输出2而不是3
代码如下:
#include<stdio.h> int main() { int k,i=1; double sum=0.000000; scanf("%d",&k); while(sum<=k) { sum=sum+1.0/i; i++; } printf("%d",i-1); return 0; }