题目:在桌子边上罗扑克,使得扑克不掉下去,并且申处桌面最长,一直扑克数量求长度。
分析:简单题。第一个扑克一定摆在中间位置,长度是0.5;
每次,将前面的看成整体,下一个扑克当做上次的桌子,这样一定是最大,因为都在平衡边界;
整体i个扑克的重心在桌子的边沿位置即可,这时前i-1的整体重心一定在桌外,最后一重心在内;
因此,最后一个伸出桌面的距离一定是1/2*1/i(杠杆平衡,力与力臂的乘积是定值,杆长1/2)
结论,l = 1/2 + 1/4 + 1/6 + ... + 1/(2n)。
说明:想起刚进实验室时,在浙大做的新手任务了(⊙_⊙)。
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
int n;
printf("# Cards Overhang\n");
while ( cin >> n ) {
double l = 0.0;
for ( int i = 1 ; i <= n ; ++ i )
l += 0.5/i;
printf("%5d%10.3lf\n",n,l);
}
return 0;
}