翻译:
若将一叠卡片放在一张桌子的边缘,你能放多远?如果你有一张卡片,你最远能达到卡片长度的一半。(我们假定卡片都正放在桌 子上。)如果你有两张卡片,你能使最上的一张卡片覆盖下面那张的1/2,底下的那张可以伸出桌面1/3的长度,即最远能达到 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)。下面有个图形的例子:

现在给定伸出长度C(0.00至5.20之间),输出至少需要多少张卡片。
解决思路
直接按照要求模拟就可以了。
#include "stdafx.h"
#include<cstdio>
#include<iostream>
using namespace std;
int main(void)
{
double c;
int i;
double Overhangs;
while (cin>>c)
{
if (0.0 == c)
{
return 0;
}
Overhangs = 0;
for (i = 1; i; i++)
{
Overhangs += 1.0 / (i + 1);
if (Overhangs >= c)
{
break;
}
}
cout << i;
}
return 0;
}
本文探讨了如何通过叠加不同数量的卡片来实现最大伸出长度的问题,并提供了一段C++代码示例来计算达到特定伸出长度所需的最少卡片数。

406

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



