POJ1003 Java实现 By VinsmokeFy

Hangover

Description

你能在多大程度上让一堆卡片悬在一张桌子上?如果您有一张卡,则可以创建一半卡长度的最大悬伸。(我们假设卡片必须垂直于桌子。)使用两张卡片,您可以将顶部卡片从底部悬垂一半,卡片长度增加一半,而底部卡片占据卡片长度的三分之一,总长度为1/2 + 1/3 = 5/6卡长度。一般来说,你可以让ň卡悬1/2 +1/3 + 1/4 + … + 1 /(ñ +1)卡片长度,其中顶部卡片伸出第二个1/2,第二个伸出第三个1/3,第三个伸出第四个1/4等,底部卡片悬挂在桌子上1 / (n + 1)。这在下图中说明。

Input

输入包含一个或多个测试用例,后跟一个包含数字0.00的行,表示输入结束。每个测试用例是包含正浮点数c的单行,其值至少为0.01且至多为5.20; c将包含正好三位数。

Output

对于每个测试用例,输出实现至少c卡长度的悬垂所需的最少卡数。使用示例中显示的确切输出格式。

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)

思路

这道题不难,属于水题,先确定题目中所需要的变量,a—读取的长度,c—计算的长的,n—卡片数量,初始直接将n设置为1,c设置为0.5,因为它只要有长度那必然要用一张卡片,第一张卡片的长度就是0.5。然后进行累加,每次加上1/(n+1)的长度。然后与a进行比较,大于a直接输出,然后初始化n,c重新开始计算下一步,按照题目给的方式输出,小于继续循环累加。

AC代码

import java.util.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class Poj1003 {
 public static void main(String[] args) throws Exception{
  BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
  double a;
  double n=1;
  double c=0.5;
  a=Double.valueOf(in.readLine());
  while(a!=0.00){
   while(c<a){
    n++;
    c=c+1/(n+1);
   }
   System.out.println((int)n+" card(s)");
   c=0.5;
   n=1;
   a=Double.valueOf(in.readLine());
  }
 }
}

卡住最长时间的地方

这次卡的时间没有很长,但是这种低级错误也比较蠢,一开始以为题中给的输入格式是一起性全输入,而我输入的时候输入一个数后直接在后面出了一个结果,就很尴尬,以为格式不能通过,通过查阅资料发现,是可以通过,是我想得过于麻烦了。

总结

今天是写博客的第二天,写的速度和做题的速度都变快了,可能是这道题比上一道题要简单吧。坚持下去,总会有收获的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值