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;
}
既然题目已经给出上限是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;
}
相关文章推荐
- POJ1003题
- POJ 1003 && HDU 1056 HangOver(水~)
- poj.org pro 1003 hangover
- [POJ_1003]Hangover
- poj 1003(Hangover)
- poj_1003
- POJ-1003
- POJ 1003 Hangover
- poj 1003坠落的蚂蚁
- poj 1003 (nyoj 156) Hangover
- poj 1003 Hangover
- poj1003
- POJ 1003
- POJ_1003
- POJ-1003:Hangover
- 【POJ】1003 Hangover
- poj 1003:Hangover
- 【思维】poj1003 Max Sum
- poj: 1003
- POJ 1003 Hangover