洛谷p1035

题目描述

已知: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;
}

 

posted @ 2018-12-01 17:06  CrossingX  阅读(383)  评论(0编辑  收藏  举报