题目:
已知:Sn=1+1/2+1/3+…+1/n 。显然对于任意一个整数 k,当 n 足够大的时候, Sn>k。现给出一个整数 k,要求计算出一个最小的 n,使得Sn>k。
输入格式
一个正整数 k。
输出格式
一个正整数 n。
输入输出样例
输入 #1复制
1
输出 #1复制
2
说明/提示
【数据范围】
对于 100%100% 的数据,1≤k≤15。
【题目来源】
NOIP 2002 普及组第一
原题链接:https://www.luogu.com.cn/problem/P1035
考点:for/while循环,数字类型
思路:定义一个变量存储求和的值与k相比较,如果<k则在循环中继续加上1.0/n,否则退出循环。
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int k;
scanf("%d",&k);
double s=0; //1.0/n是一个浮点数,所以s也应该定义为一个浮点数.
//注:此处s的定义应为double而不能是float,因为当k大于一定值时,1.0/n的值将大于float的表示范围
int n=1;
while(s<=k)
{
s=s+1.0/n; //如果用1的话就相当于一直是s=s+0
n++;
}
printf("%d",n-1); //-1是因为在退出循环前n多加了1
return 0;
}
给出的是用while循环所写的代码,也可用for循环。