未能通过两个测试用例的HackerRank BonAppétit问题

时间:2019-03-17 04:10:47

标签: java

这与HackerRank BonAppétit问题有关。我已经在Java中使用BigDecimal编写了代码。除两个以外的所有测试用例均失败,我不确定为什么。问题陈述是,两个人比尔和安娜在一家餐馆。比尔点了安娜可能会过敏的东西。因此,例如,如果帐单金额数组为[6,2,4],而安娜没有/避免帐单[2],则如果帐单正确执行,则应将帐单拆分为(6 + 2)/ 2。如果Bill没有正确分割钞票,安娜应该在最后获得退款。例如,如果账单将其计算为(6 + 2 + 4)/ 2 = 16,而anna应该获得4的退款。如果anna收取的费用与计算的金额相同,则您将打印“ Bon Appetit”,否则您将打印多余的安娜收取的费用。

我做了什么?

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

public class BonAppetit {

    // Complete the bonAppetit function below.
    static void bonAppetit(List<Integer> billList, Integer avoidedItemIndex, Integer chargedToAnna) {
        List<BigInteger> billListBigInteger = new ArrayList<>();
        for(Integer bill : billList) {
            billListBigInteger.add(BigInteger.valueOf(bill));
        }
        BigInteger avoidedItem = BigInteger.valueOf(billList.get(avoidedItemIndex));
        BigInteger annasCharge = BigInteger.valueOf(chargedToAnna);
        BigInteger sum = BigInteger.ZERO;
        for(int i=0;i<billListBigInteger.size();i++) {
            if(i != avoidedItemIndex) {
                sum = sum.add(billListBigInteger.get(i));
            }
        }
        //Since there are only two people
        BigInteger split = sum.divide(BigInteger.valueOf(2));
        if(split.equals(annasCharge)) {
            System.out.println("Bon Appetit");
        } else {
            System.out.println(annasCharge.subtract(split).intValue());
        }
    }

    public static void main(String[] args) throws IOException {
        List<Integer> billList = new ArrayList<>();
        File inputFile = new File("BonAppettitTestCase");
        if(!inputFile.exists()) {
            System.out.println("FIle not found, can't continue, exiting");
            return;
        }
        String line;
        BufferedReader fileBufferedReader = new BufferedReader(new FileReader(inputFile));
        while((line = fileBufferedReader.readLine()) != null) {
            String[] splitNumberString = line.split(",");
            for(String number : splitNumberString) {
                billList.add(Integer.valueOf(number));
            }
        }
        bonAppetit(billList, 2814, 249990732);
    }
}

失败的测试用例具有以下编号,如列表中的附件所示。它包含100000个数字,这就是为什么我要附加具有此详细信息的另一个文件,以便如果您创建一个项目来解析这些数字,那么对您来说将很容易。

bonAppetit函数的第一个参数是billList。我创建了一个用逗号分隔的列表comma separated list of numbers,以便您可以将它们添加到列表中并使用它们。第二个参数是安娜避免食用的指数。第三个参数是安娜被收取的费用。其他测试用例正在通过,但是这个用例失败了,我不明白为什么。也许在这里并不需要BigInteger,但是我仍然使用它。请为我指出所有测试用例解决此问题的正确方向。正确的答案是4009谢谢!

1 个答案:

答案 0 :(得分:1)

我什至不知道你为什么急着使用BigInteger ...

问题很简单,计算总和然后减去多余的食物k,将其分割,如果等于b,则为“ Bon Appetit”,否则他将退还她一半的多余元素{ {1}}他向她滥收费用。

类似的东西

k