1003_Java

题意:
这道题的意思是(先不考虑物理学上是否合理):N张卡片叠放在桌子上(从上到下编号第1.2.3.4...n张),每张卡片都有一部分悬空,如果只有一张卡片,那么最多1/2悬空,如果有两张卡片,那么第一张最多1/2悬空,第二张最多3/1悬空,如果有三张卡片,那么第一张最多1/2悬空,第二张最多1/3悬空,第三张最多4/1悬空,如果有N张卡片,那么叠放后,最大的悬空总长度则为1/2+1/3+1/4+1/5+...+1/(n+1)。
输入悬空总长度x,求出能达到x值的最少的卡片张数n,如果输入的是0.00,则停止计算。
转换为公式则为:
1/2+1/3+1/4+1/5+...+1/(n+1)=x。输入x的值,求出n的值。

Input
卡片悬空的总长度

Output
能够满足这个长度的最小卡片数量

解题思路:
穷举法


import java.util.*;

public class Main {
    public static void main(String[] args) {
//        1/2+1/3+1/4+1/5+...+1/(n+1)=x。输入x的值,求出n的值。
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            float inputLength = sc.nextFloat();
            if (inputLength == 0.00) {
                return;
            }
            int count = 0;
            while (true) {
                float currentLength = 0f;
                count++;
                for (int i = 0; i < count; i++) {
                    currentLength += 1f / (i + 2);
                }
                if (currentLength >= inputLength) {
                    break;
                }
            }
            System.out.println(count + " card(s)");
        }
    }
}

Sample Input

1.00
3.71
0.04
5.19
0.00

Sample Output

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

你可能感兴趣的:(1003_Java)