题目描述:
假设有n块长度为1的木板重叠放在桌子边缘,最上面一块木板最多有1/2悬空,第二块为1/3,以此类推,第n块最多有1/n悬空,给出木板悬空的总长度,求需要用到的木板的最小数目。
算法分析:
设总长度为 length, 需要的最少木板数为 n,
假设有n块长度为1的木板重叠放在桌子边缘,最上面一块木板最多有1/2悬空,第二块为1/3,以此类推,第n块最多有1/n悬空,给出木板悬空的总长度,求需要用到的木板的最小数目。
算法分析:
设总长度为 length, 需要的最少木板数为 n,
根据题意,满足不等式 length <= 1/2 + 1/3 + … + 1/n 的最小 n 即为所求
Code:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double n;
while( scanf( "%lf", &n ), n )
{
double sum = 0.0;
int pcs = 0;
while( sum < n )
{
pcs++;
sum += 1.0 / ( pcs + 1 );
}
printf( "%d card(s)\n", pcs );
}
return 0;
}