题目大意:给出一个距离dis,表示堆在桌子上的扑克的伸出距离,问你至少需要多少张扑克能够堆出这个伸出距离。
数理分析:其实这道题目的描述就是给出了我们的解题方法,它告诉我们n张扑克能够伸出的最远距离是∑1/i,i∈[2,i+1],这就使得问题变得简单了很多。但是这个问题的原始模型其实是基于长度为2、质量为1的扑克的条件,它其实是调和数的基本模型。
![]()
参考代码如下。
[C] 纯文本查看 复制代码 #include<cstdio> using namespace std;
int main()
{
double dis;
double temp,j;
int i;
while(scanf("%lf",&dis)!=EOF && dis != 0.00)
{
temp = 0;
for(i = 2;;i++)
{
j = (double)i;
temp += 1/j;
if(temp >= dis)
break;
}
printf("%d card(s)\n",i-1);
}
} |