您能使一叠在桌子上的卡片向桌子外伸出多远?如果是一张卡片,这张卡片向桌子外伸出卡片的一半长度。(卡片以直角伸出桌子。)如果有两张卡片,就让上面一张卡片向外伸出下面那张卡片的一半长度,而下面的那张卡片向桌子外伸出卡片的三分之一长度,所以两张卡片向桌子外延伸的总长度是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. 1.00 2. 3.71 3. 0.04 4. 5.19 5. 0.00
输出样例:
1. 3 card(s) 2. 61 card(s) 3. 1 card(s) 4. 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; }