题意:
这道题的意思是(先不考虑物理学上是否合理):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)
网友评论