本文主要是分享解决题目的思路
题目描述
已知: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<iostream>、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<iostream>
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<<n;
return 0;
}
总结
欧克,关于这一题的讲解就结束了,后续我会带来更多优质的内容,喜欢的可以点个赞支持一下呀!