无法在codewar中传递测试用例

时间:2017-10-18 19:21:52

标签: java algorithm if-statement

新的"复仇者"电影刚刚发布!电影票房中有很多人站在一条巨大的线上。他们每人都有100,50或25美元的账单。 A"复仇者"门票费25美元。

Vasya目前是一名职员。他想向这一行中的每个人出售一张票。

瓦西亚可以向每个人出售一张票,如果他最初没有钱就给出改变,并严格按照人们在线下的顺序出售门票吗?

如果Vasya可以向每个人出售门票并进行更改,则返回YES。否则返回NO。

例如

Line.Tickets(new int[] {25, 25, 50}) // => YES 

我能够从11个中传递10个测试用例但是对于1个测试用例,它表明我的结果是错误的。

说, 输入=> Line.Tickets(new int[] {25,50,25,100}) 我的代码的输出=

  

NO

如果第一个人有25 $ bill-> count25 = 1并且count50 = 0,如果第二个人有50美元账单 - > count50 = 1并且count25 = 0,如果第三个人有25 $ bill-> count50 = 1且count25 = 1,如果第四人有100 $ bill-> count50 = 0且count25 = 0

public class Line {
    public static String Tickets(int[] peopleInLine) {
        int count25 = 0;
        int count50 = 0;
        for (int i = 0; i < peopleInLine.length; i++) {
            if (peopleInLine[i] == 100) {
                if (count25 == 1 && count50 > 0) {
                    count25 = count25 - 1;
                    count50 = count50 - 1;
                }

                if (count25 >= 3) {
                    count25 = count25 - 3;
                } else {
                    return "NO";
                }
            }

            if (peopleInLine[i] == 25) {
                count25 = count25 + 1;
            }

            if (peopleInLine[i] == 50) {
                count50 = count50 + 1;
                count25 = count25 - 1;
                if (count25 < 0) {
                    return "NO";
                }
            }
        }
        return "YES";
    }
}

3 个答案:

答案 0 :(得分:0)

如果第一个if语句(if(count25>=3))评估为if(count25==1&&count50>0),则不应评估100美元钞票案例(true)中的第二个if语句。

使用else if作为第二个条件:

if (peopleInLine[i] == 100) {
    if(count25 == 1 && count50 > 0) {
        count25--;
        count50--;
    } else if (count25 >= 3) {
        count25-=3;
    } else {
        return "NO";
    }
}

答案 1 :(得分:0)

private static String checkTicketChangePossible(int[] ticketPrices){
      String returnValue = "YES";
      int bill_25 = 0;
      int bill_50 = 0;

      for(int i= 0; i< ticketPrices.length; i++){
          if(ticketPrices[i] == 25){
              bill_25 += 1;
          }
          if(ticketPrices[i] == 50){
              bill_25 -= 1;
              bill_50 += 1;
          }
          if(ticketPrices[i] == 100){
              if(bill_50 == 0 && bill_25 >3){
                bill_25 -= 3;
              }else{
                bill_25 -= 1; bill_50 -= 1;
              }
          }

          if(bill_25 < 0 || bill_50 <0){
             returnValue = "NO";
             break;
          }

      }
      return returnValue;
}

答案 2 :(得分:0)

function ShowFinalSQL(const qry: TFDQuery): String;
var
  cSQL: String;
  oItem: TCollectionItem;
  oParam: TFDParam absolute oItem;
begin
  cSQL := qry.SQL.Text;
  for oItem in qry.Params do
  begin
    cSQL := cSQL.Replace(oParam.Name, oParam.Value);
  end;
  Result := cSQL;
end;