现在的位置: 首页 > 综合 > 正文

Code[vs]3064 求和(模拟)

2018年04月28日 ⁄ 综合 ⁄ 共 775字 ⁄ 字号 评论关闭

3064 求和

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 青铜 Bronze

题目描述 Description

输入一个数xx
<= 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;
}

抱歉!评论已关闭.