Accept: 2670 Submit: 11015
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
How far can you make a stack of cards overhang a table? If you have one card, you can create a maximum overhang of half a card length. (We're assuming that the cards must be perpendicular to the table.) With two cards you can make the top card overhang the bottom one by half a card length, and the bottom one overhang the table by a third of a card length, for a total maximum overhang of 1/2 + 1/3 = 5/6 card lengths. In general you can make n cards overhang by 1/2 + 1/3 + 1/4 + ... + 1/(n + 1) card lengths, where the top card overhangs the second by 1/2, the second overhangs tha third by 1/3, the third overhangs the fourth by 1/4, etc., and the bottom card overhangs the table by 1/(n + 1). This is illustrated in the figure below.

Input
Output
Sample Input
Sample Output
#include<iostream>
#include<cstdio>
#include<math.h>
#include<cstring>
#include<climits>
#include<string>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<list>
#include<vector>
#include<sstream>
#include<algorithm>
using namespace std;
#define rep(i,j,k)for(i=j;i<k;i++)
#define per(i,j,k)for(i=j;i>k;i--)
#define ms(x,y)memset(x,y,sizeof(x))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
const int INF=0x7ffffff;
const int M=1e5+10;
double i,j,k,m,q;
char s[M];
int a[M];
int b[M];
double n,sum;
int main()
{
while(~scanf("%lf",&n)){
if(n==0)break;
int ans=0;
sum=0;
for(i=1;;i++){
sum+=1.0/(i+1.0);
ans++;
if(sum>=n)break;
}
printf("%d card(s)\n",ans);
}
return 0;
}

探讨如何通过堆叠方式使卡片最大限度地悬空于桌面之外。利用数学原理计算不同数量卡片达到特定悬空长度所需的最少卡片数。
764

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



