思路:先打表,然后再二分查找,此时的二分查找要找到满足条件的最小的一个数
代码如下:
#include <iostream>
using namespace std;
#define N 300
double dist[N];
void init()
{
int i = 0;
dist[0] = 0;
for (i = 1;i < N; ++i)
{
dist[i] = dist[i - 1] + 1.00 / (i + 1);
}
}
int binarySearch(double dist[], int n, double key)
{
int left = 0, right = n - 1;
int mid = 0;
while(left <= right)
{
mid = left + (right - left ) / 2;
if(dist[mid] >= key)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
return left;
}
int main()
{
double key;
init();
while(scanf("%lf", &key) != EOF && key != 0.00)
{
printf("%d card(s)\n", binarySearch(dist, N, key));
}
return 0;
}

735

被折叠的 条评论
为什么被折叠?



