您能使一叠在桌子上的卡片向桌子外伸出多远?如果是一张卡片,这张卡片向桌子外伸出卡片的一半长度。(卡片以直角伸出桌子。)如果有两张卡片,就让上面一张卡片向外伸出下面那张卡片的一半长度,而下面的那张卡片向桌子外伸出卡片的三分之一长度,所以两张卡片向桌子外延伸的总长度是1/2 + 1/3 = 5/6卡片长度。依次类推,n张卡片向桌子外延伸的总长度是1/2 + 1/3 + 1/4 + ... + 1/(n + 1)卡片长度:最上面的卡片向外延伸1/2,第二张卡片向外延伸1/3 ,第三张卡片向外延伸1/4,……,最下面一张卡片向桌子外延伸1/(n + 1),如图所示。
输入格式:
输入由一个或多个测试用例组成,最后一行用0.00表示输入结束,每个测试用例一行,是一个3位数正浮点数c,最小值0.01,最大值5.20。
输出格式:
对每个测试数据c,输出要伸出卡片长度c所最少要用的卡片的数目,输出形式见样例输出。
输入样例:
1.00
3.71
0.04
5.19
0.00
输出样例:
3 card(s)
61 card(s)
1 card(s)
273 card(s)
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
double f[N];
int main()
{
double s = 0;
for(int i=2;i<=N;i++)//预处理所有数据
{
double t = 1.0 / i;
s += t;
f[i-1] = s;
}
double x;
while(cin>>x&&x != 0)
{
for(int i=1;;i++)
{
if(f[i]>=x)//达到要求
{
printf("%d card(s)\n",i);
break;
}
}
}
return 0;
}