一. 题目
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 116593 | Accepted: 56886 |
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
1.003.710.045.190.00
Sample Output
3 card(s)61 card(s)1 card(s)273 card(s)
Source
- 按照固定的累加方式:从高层到低层,相对于其相邻下层可以伸出的长度为(1/2),(1/3),...,(1/n)
- 给定一个指定长度 S,问最少需要累加多上块板,使其相对于桌面的伸出长度大于或等于 S
三. 分析
- 算法核心: 此题比较简单,无需考虑任何算法
- 实现细节: 简单的浮点数累加运算即可
四. 题解
1 #include2 3 int main() 4 { 5 int i; 6 float length, sum; 7 8 while (1) { 9 sum = 0;10 scanf("%f\n", &length);11 if (!length) break;12 13 for (i = 2; ; i++) {14 sum += (1 / (float)i);15 16 if (sum >= length) {17 printf("%d card(s)\n", i - 1);18 break;19 }20 }21 }22 23 return 0;24 }