百炼OJ1004

论坛 期权论坛 脚本     
匿名技术用户   2021-1-10 06:38   11   0
描述

Larry今年毕业并找到了一份工作。他赚很多钱,但似乎总是不够。Larry认为他需要控制他的投资以解决自己的财务问题。Larry拿到了自己的银行账户详单,想看看自己有多少钱。请帮助Larry写一个程序,通过过去12个月中每月的月末结余,计算平均结余。

输入
输入包含12行,每行包含一个数,为某个月的结余。每个数都是不大于1,000,000的正数,保留两位小数,省略"$"符。
输出
输出一个数,为这12个月的平均月末结余,保留到小数点后第二位,并在最前面加一个"$"符。
样例输入
100.00
489.12
12454.12
1234.10
823.05
109.20
5.27
1542.25
839.18
83.99
1295.01
1.75
样例输出
$1581.42
这个破题卡了我半天,一直是WrongAnswer。网上找了几个java的提交上去也都是 WrongAnswer。看了oj的提交记录,用java的也多会出现 WrongAnswer。

首先来看看我最初的代码:

[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.text.DecimalFormat;
  2. import java.util.Scanner;
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner in = new Scanner(System.in);
  6. float r = 0;
  7. int i = 0;
  8. while (i < 12) {
  9. r = r + in.nextFloat();
  10. i++;
  11. }
  12. r = r / 12;
  13. DecimalFormat df = new DecimalFormat(".00");
  14. String s = df.format(r);
  15. System.out.println("$" + s);
  16. }
  17. }

那么错误在哪里呢?我想到了边界测试。有如下两个测试用例

case 1:

input:


10000.00
10000.00
10000.00
10000.00
10000.00
10000.00
10000.00
10000.00
10000.00
10000.00
10000.00
10000.00 output:

$10000.00

case 2:

input:

0.01
0.01
0.01
0.01
0.01
0.01
0.01
0.01
0.01
0.01
0.01
0.01

output:

$.01

显然case2出现了问题。问题在于数据格式。当整数部分为0时会被舍去(注意红色部分)。为此修改如下:

[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.text.DecimalFormat;
  2. import java.util.Scanner;
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner in = new Scanner(System.in);
  6. float r = 0;
  7. int i = 0;
  8. while (i < 12) {
  9. r = r + in.nextFloat();
  10. i++;
  11. }
  12. r = r / 12;
  13. DecimalFormat df = new DecimalFormat("0.00");
  14. System.out.println("$" + df.format(r));
  15. }
  16. }
这次两个用例都通过了,提交到oj也accepted了。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP