一道水题,我就不想多说什么了。
//题目洛谷链接
https://www.luogu.org/problemnew/show/P1035
//题目Openjudge链接
http://noi.openjudge.cn/ch0105/27/
题目描述
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
输入输出格式
输入格式:
一个正整数K。
输出格式:
一个正整数N。
输入输出样例
输入样例#1:1 输出样例#1:2
//代码及其讲解
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int k,i=0;//注意i首先要初始化为0,若初始化为1,则其下循环语句要做出相应的改变。
double Sn=0;//累加和存储变量,注意在之后会出现小数,所以应当定义一个浮点类型的变量。
cin>>k;
while(Sn<=k)//循环条件。
{
i++;
Sn+=1*1.0/i;//注意计算机在作除法运算时只保留整数部分,因此应先将被除数或除数乘1.0。
}
cout<<i<<endl;
return 0;
}
总结:noip普及组的题不会很难,但必须扎实扎实再扎实,多关注自己第一次提交的分数,做到尽量一次AC.
该题我本人喜欢运用for循环来解,但毕竟是while循环语句的习题,所以不附代码。
如有疑问请咨询我的qq:2039315696.
版权声明:本文为qq_41697208原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。