题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1056
心得:
二分查找
代码:
#include <iostream>
using namespace std;
int bsearch(int l,int r,double k,double a[]){ //二分查找
int m;
while(l<=r){
m=(l+r)/2;
if(k>a[m-1] && k<=a[m]) break;
else if(k>a[m]) l=m+1;
else if(k<a[m]) r=m-1;
}
return m;
}
int main(){
int i;
double n;
double a[1001];
a[0]=0;
for(i=1;i<1001;i++)
a[i]=a[i-1]+1/double((i+1));
while(cin>>n,n!=0.00)
cout<<bsearch(1,1000,n,a)<<" card(s)"<<endl;
return 0;
}