简单的题目,我的解法采用预处理,然后使用折半查找返回答案。
#include<stdio.h>
double answer[300];
int len=0;
double num;
int binarySearch()
{
int l=1,r=len,half;
while(l<r)
{
half=(l+r)/2;
if(answer[half]<num)
l=half+1;
else
r=half;
}
return l;
}
int main()
{
//freopen("HangOver.txt","r",stdin);
answer[len]=0;
while(++len)
{
answer[len]=1.0/(len+1)+answer[len-1];
if(answer[len]>=5.20)
break;
}
while(scanf("%lf",&num)&&num>0)
{
printf("%d card(s)\n",binarySearch());
}
}