Java HackerRank Bon应用程序é;未能通过两个测试用例的tit问题
这是关于HackerRank Bon Appétit的问题。我已经在Java中使用BigDecimal编写了代码。除了两个之外,所有的测试用例都失败了,我不知道为什么。问题是,比尔和安娜两人在一家餐馆。比尔点了安娜可能会过敏的东西。因此,例如,如果账单金额数组为[6,2,4],而anna没有/避免账单[2],则应该拆分账单,如(6+2)/2(如果账单正确)。如果比尔没有正确分摊账单,安娜最终应该得到退款。例如,如果bill将其计算为(6+2+4)/2=16,anna应获得4的退款。如果anna收取的金额与计算的金额相同,则打印“祝您胃口好”,否则打印anna收取的额外金额 我做了什么Java HackerRank Bon应用程序é;未能通过两个测试用例的tit问题,java,Java,这是关于HackerRank Bon Appétit的问题。我已经在Java中使用BigDecimal编写了代码。除了两个之外,所有的测试用例都失败了,我不知道为什么。问题是,比尔和安娜两人在一家餐馆。比尔点了安娜可能会过敏的东西。因此,例如,如果账单金额数组为[6,2,4],而anna没有/避免账单[2],则应该拆分账单,如(6+2)/2(如果账单正确)。如果比尔没有正确分摊账单,安娜最终应该得到退款。例如,如果bill将其计算为(6+2+4)/2=16,anna应获得4的退款。如果anna收
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);
}
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.math.biginger;
导入java.util.ArrayList;
导入java.util.List;
公营船艇{
//完成下面的bonAppetit函数。
静态无效bonAppetit(列表billList、整数avoidedItemIndex、整数chargedToAnna){
List billListBigInteger=新的ArrayList();
用于(整型账单:账单列表){
添加(biginger.valueOf(bill));
}
BigInteger AvoidItem=BigInteger.valueOf(billList.get(AvoidedItemEx));
BigInteger Annasharge=BigInteger.valueOf(chargedToAnna);
BigInteger总和=BigInteger.0;
对于(int i=0;i我甚至不知道为什么您要匆忙使用BigInteger
问题很简单,数一数总数,然后减去不需要的食物k
,将其分割,如果它等于b
,则是“胃口好”,否则他将退还她一半不需要的元素k
他向她多收费
像这样的
static void bonAppetit(List<Integer> bill, int k, int b) {
int sum=0;
for(int i=0;i<bill.size();i++){
sum+=bill.get(i);
}
sum-=bill.get(k);
sum=sum/2;
if(sum==b){
System.out.println("Bon Appetit");
}else{
System.out.println(bill.get(k)/2);
}
}
static void bonappett(列表票据,int k,int b){
整数和=0;
对于(int i=0;如果有人投了反对票,请给出你为什么这样做的原因。我会编辑这个问题。谢谢。有人能告诉我为什么我会因为这个问题被否决吗?我发布了代码,我尽可能地发布了这个问题。这只是阻止学习程序员在StackOverflow中发布任何这样的问题未来。谢谢。它与您提供的解决方案一起工作。但是,在问题中,假设anna被收取249990732。如果我在计算金额时不包括anna避免的项目,则拆分金额,最后将此拆分金额与anna的收费金额进行比较。如果拆分金额等于anna的收费金额,则为“祝你胃口好”否则,安娜会得到一部分费用的退款。这难道不应该给出正确的答案吗?如果我错了,请纠正我。是的,你是正确的| sum-b |也正确,但错误不在那里。错误是这个if语句(!abillist.equals(avoidetem)){sum=sum.add(abillist)}您没有添加所有与避免项具有相同值的元素,这是错误的,这就是为什么我添加了所有元素,然后只减去我们要避免的元素一次。JadedBeast-您完全正确。我使用了if(!abillist.equals(avoidetem)){sum=sum.add(abillist);}
而不是如果(i!=avoidedItemIndex){sum=sum.add(billListBigInteger.get(i));}
这导致了所有问题。我是在比较AvoidNumber元素,而不是比较AvoidIndex。感谢您指出我的错误。我已经用此更正编辑了原始代码,所有测试用例都通过了。