您的位置:首页 > 其它

poj1003

2015-03-19 22:47 197 查看
/*给出一个浮点数c,求出使得 不等式 1/2 + 1/3 + ... + 1/(n+1) >= c 成立的最小 n。

    既然题目已经给出上限是5.20则可以求出,n最大为280.

  用二分查找,但是由于数组长度很短,时间上不会有太大的差别。*/

#include <iostream>

#include <stdio.h>

using namespace std;

double a[300];

int search_c(double c)

{

    int i=1,j=280;

    while (j-i>1)      /*注意条件*/

    {

        int mid=(i+j)/2;

        if (a[mid]<c)i=mid;

        if (a[mid]>=c)j=mid;   /*取超过c的最小的n,故等号在j处*/

    }

    if (a[i]>=c) return i;else return j;  /*可能c比a[1]还要小*/

}

int main()

{

    int i;

    a[0]=0;

    for (i=1;i<=280;i++)

        a[i]=double((a[i-1]+1.0/double(i+1))*100/1)/100.0;   /*打表,保留有限小数位*/

    double c;

    cin>>c;

    while (c>0)

    {

      cout<<search_c(c)<<" card(s)"<<endl;

      cin>>c;

    }

    return 0;

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