洛谷——P1035 [NOIP2002 普及组] 级数求和
原创
©著作权归作者所有:来自51CTO博客作者CMMKK的原创作品,请联系作者获取转载授权,否则将追究法律责任
P1035 [NOIP2002 普及组] 级数求和
题目描述
已知:S_n= 1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n}S**n=1+21+31+…+n1。显然对于任意一个整数 kk,当 nn 足够大的时候,S_n>kS**n>k。
现给出一个整数 kk,要求计算出一个最小的 nn,使得 S_n>kS**n>k。
输入格式
一个正整数 kk。
输出格式
一个正整数 nn。
输入输出样例
输入 #1复制
输出 #1复制
说明/提示
【数据范围】
对于 100%100% 的数据,1\le k \le 151≤k≤15。
解法一:可作为练习(提交只能40分)
package com.kk.luogu;
import java.util.Scanner;
//级数求和
public class P1035 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int nums=scanner.nextInt();
System.out.println(SummationOfSeries(nums));
}
public static int SummationOfSeries(int num){
double sum=0;
int i=1;
int tmp=0;
for ( i = 1; i < 10005; i++) {
sum+=(double) 1/i;
if(sum>num) {
tmp=i;
break;
}
}
return tmp;
}
}
解法二:枚举法(得100分)
#include<bits/stdc++.h>
using namespace std;
int main() {
int k,n=0;
cin>>k;
for(double Sn=0;Sn<=k;++n,Sn+=1.0/n);
cout<<n;
return 0;
}