题目:在桌子边上罗扑克,使得扑克不掉下去,并且申处桌面最长,一直扑克数量求长度。
分析:简单题。第一个扑克一定摆在中间位置,长度是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; }
UVa 651 - Deck
时间: 2024-11-10 19:01:36