这又是一个破水题。涉及到小学四年级的知识。

原题地址:http://poj.org/problem?id=1003

POJ 1003 卡片摆放

描述

你可以把一堆卡片摆出桌面多长呢?如果你有一张卡,你可以把这个卡片摆出桌面半张卡的长度。(我们假设卡片总会与桌子的边缘是垂直 [perpendicular] 的。)如果要放两张卡,那么最上面的那张会超出下面那张半张卡的长度,而下面那张会超出桌面三分之一张卡的长度,也就是说,它们的总长度是 [latex]\frac{1}{2}+\frac{1}{3}=\frac{5}{6}[/latex] 单位长度。一般地,如果你有 n 张卡,那么你可以摆出的长度是 [latex]\frac{1}{2}+\frac{1}{3}+\dots+\frac{1}{n+1}[/latex] . 此时,最上面的卡片超出桌子 [latex]\frac{1}{2}[/latex] (overhangs the table by 1/2), 第二张则超出桌子超出桌面的 [latex]\frac{1}{3}[/latex] , 以此类推,直到最后一张卡片,即第 n 张,超出桌子 [latex]\frac{1}{n+1}[/latex] . 图示如下:

卡片摆放示意图

输入

输入数据包含一组或多组。如果某一行出现了数据 0.00 , 说明你已经完成了对输入数据的读取。每行数据包含一个正浮点数 c, 最小值为 0.01, 最大值为 5.20; 并且保证输入的 c 刚好有 3 个数字。

输出

对于每种情况,输出能够达到要求长度所需卡片的最小数目。格式请参考样例输出。

样例输入

1.00
3.71
0.04
5.19
0.00

样例输出

3 card(s)
61 card(s)
1 card(s)
273 card(s)

解题思路

纯粹水题,就一个一个加。

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        float length = 0.0f;
        while (cin.hasNextFloat()) {
            length = cin.nextFloat();
            if (length == 0.0f)
                break;
            int cards = 1;
            while (length > 0.0f)
                length -= 1.0f / (float)++cards;
            System.out.println((cards - 1) + " card(s)");
        }
    }
}

原创文章,转载请注明来源:http://euyuil.com/2252/poj-1003-hangover/