为什么这会在codechef上显示错误的答案,它在我的ide上工作

时间:2015-06-13 12:36:34

标签: java

Pooja希望从ATM取款X $ US。如果X是5的倍数,自动提款机将只接受交易,并且Pooja的账户余额有足够的现金来执行提款交易(包括银行手续费)。对于每次成功提款,银行收取0.50美元。

在尝试交易后计算Pooja的帐户余额。

输入

正整数0 < X <= 2000 - Pooja希望撤回的现金数量。

非负数0 <= Y <= 2000,精确度为两位数 - Pooja的初始账户余额。

输出

在尝试交易后输出帐户余额,以两位精度数字给出。如果账户中没有足够的资金来完成交易,请输出当前的银行余额。

import java.util.Scanner;

 class HS08TEST {
    public static void main(String[] args) {
        Scanner s =new Scanner(System.in);
        double x = s.nextDouble();
        double y =s.nextDouble();
        if( x>=0.00 && x<=2000.00 &&y>=0.00 && y<=2000.00){
            if(x==0){
                System.out.printf("%.2f",y);

            }
            else if(x%5==0.00 && x<=y){
                System.out.printf("%.2f",y-x-0.50);
            }
            else{
                System.out.printf("%.2f",y);
            }
        }
    }

}

代码在我的IDE上工作正常,但它在codechef上显示错误的答案。当我在codechef上编译它时显示“错误的答案”。我没有得到真实的地方问题。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

问题陈述说&#34;有足够的现金来执行提款交易(包括银行手续费)&#34;,但是银行费用在测试中被忽略。

该程序允许余额在x = 5,y = 5.07时变为负值。

此外,不要使用double作为需要精确计算的短小数。见Is floating point math broken?

答案 1 :(得分:0)

我编辑了我的代码,这个新代码运行正常。最初我没有正确地关注数据类型。

import java.util.Scanner;

public class HS08TEST {
    public static void main(String[] args) {
        Scanner s =new Scanner(System.in);
        int x = s.nextInt();
        float y =s.nextFloat();
        if( x>=0 && x<=2000 &&y>=0&& y<=2000){
            if(x==0){
                System.out.printf("%.2f",y);

            }

            else if(x%5==0 && x+0.50<=y){
                System.out.printf("%.2f",y-x-0.50);
            }
            else{
                System.out.printf("%.2f",y);
            }
        }
    }

}