P1035 [NOIP2002 普及组] 级数求和

本文主要是分享解决题目的思路


题目描述

[NOIP2002 普及组] 级数求和 - 洛谷

已知:Sn=1+12+13+…+1nSn​=1+21​+31​+…+n1​。显然对于任意一个整数 kk,当 nn 足够大的时候,Sn>kSn​>k。

现给出一个整数 kk,要求计算出一个最小的 nn,使得 Sn>kSn​>k。

输入格式

一个正整数 kk。

输出格式

一个正整数 nn。

输入输出样例

输入 #1复制

1

输出 #1复制

2

说明/提示

【数据范围】

对于 100%100% 的数据,1≤k≤151≤k≤15。


思路分析:

0、首先给上头文件#include、using namespace std;再创建main函数

1、我们先看题目进行分析,输入,输出分别是一个正整数

2、我们先创建两个变量,分别为题目中的k,n,都初始化为零;

3、然后观察到题目中涉及分数相加,我们可以再创建一个double类型的变量为sn,用来装这些数的相加,也初始化为零

4、结合“现给出一个整数 kk,要求计算出一个最小的 n,使得 Sn>kSn​>k。”我们创建一个while循环将sn>k作为结束条件,然后通过n++;sn+=1.0/n;不断对sn进行操作,直到sn刚好大于k时结束循环,此时n就是最小的 n,使得 Sn>kSn​>k。


代码实现:

#include
using namespace std;
int main()
{
int k=0;int n=0;double sn=0;
cin>>k;
while(sn<=k)
{
n++;sn+=1.0/n;
}
cout<


总结


         欧克,关于这一题的讲解就结束了,后续我会带来更多优质的内容,喜欢的可以点个赞支持一下呀!

你可能感兴趣的:(算法,c++)