这与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谢谢!
答案 0 :(得分:1)
我什至不知道你为什么急着使用BigInteger ...
问题很简单,计算总和然后减去多余的食物k
,将其分割,如果等于b
,则为“ Bon Appetit”,否则他将退还她一半的多余元素{ {1}}他向她滥收费用。
类似的东西
k