题目描述:
已知:S_n= 1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n}Sn=1+21+31+…+n1。显然对于任意一个整数 kk,当 nn 足够大的时候,S_n>kSn>k。
现给出一个整数 kk,要求计算出一个最小的 nn,使得 S_n>kSn>k。
输入格式
一个正整数 kk。
输出格式
一个正整数 nn。
输入输出样例
输入
1
输出
2
说明/提示
【数据范围】
对于 100\%100% 的数据,1\le k \le 151≤k≤15。
【题目来源】
NOIP 2002 普及组第一题
import java.util.Scanner;
public class 级数求和 {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
int k = sc.nextInt();
int n=1;
double s =0;
while(true)
{
s+=1.0/n;// 一定要是1.0 1的话不出结果
if (s>k)
{
System.out.println(n);
break;
}
n++;
}
}
}
代码解释:不建议使用for循环,因为n题目中没给具体数。用while循环简单方便。
该博客介绍了一个计算级数求和的问题,其中给定一个正整数k,需要找到最小的n,使得级数S_n大于k。代码采用while循环实现,通过不断累加1/n直到和大于k,输出最小的n。文章强调了在累加过程中使用1.0/n的重要性以避免精度问题。题目来源于NOIP2002普及组,数据范围为1≤k≤15,适合初学者练习。
652

被折叠的 条评论
为什么被折叠?



