您的位置:首页 > 其它

Code[vs]3064 求和(模拟)

2015-02-04 23:51 369 查看


3064 求和

时间限制: 1 s

空间限制: 32000 KB

题目等级 : 青铜 Bronze


题解

查看运行结果

题目描述 Description

输入一个数x(x
<= 10000),求数n使的S= 1+1/2+1/3+…+1/n>=x的最小n值。但如果在n
> 5000000时都无法满足,则输出“Error!”(没有引号)

输入描述 Input Description

只有一个数x

输出描述 Output Description

如果数n使的S=
1+1/2+1/3+…+1/n>=x的最小n值小于5000000,则输出一个数n
否则输出“Error!”(没有引号)

样例输入 Sample Input

输入样例1
10
输入样例2
1000

样例输出 Sample Output

输出样例1
12367

输出样例2
Error!

解题思路:

很水的模拟题,只要按照题目中说的要求去写就好了,慢慢来,for( i = 1;;i++ )这个技巧要学会,但是什么时候结束这个for循环呢,这就要看你怎么调整你的姿势了。。。

QAQ,按照我的来就好了,两种情况下会打破for循环。。。

1. i > 500000。

2.找到了最小的n。

好了,看代码吧。

代码:

# include<cstdio>
# include<iostream>

using namespace std;

const double eps = 1e-8;

int main(void)
{
    int x;
    while ( cin>>x )
    {
        int flag = 0;
        int n;
        double sum = 0;
        for ( int i = 1;;i++ )
        {
            sum+=(1.0/i);
            if ( i > 5000000 )
            {
                if ( sum-x < eps )
                {
                    flag = 1;
                    break;
                }
            }
            if ( sum >= x )
            {
                n = i;
                break;
            }
        }

        if ( flag )
        {
            cout<<"Error!"<<endl;
        }
        else
        {
            cout<<n<<endl;
        }

    }

    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: