poj1003

/*给出一个浮点数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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值