代码战争中的算法混乱

Algorithm confusion in codewars

本文关键字:算法 混乱 战争 代码      更新时间:2023-09-26

所以问题来了:

新的《复仇者联盟》电影刚刚上映!电影院售票处有很多人排起了长队。他们每人有一张100、50或25美元的钞票。一张《复仇者联盟》的票要25美元。

瓦西娅目前是一名职员。他想把票卖给排队的每一个人。

如果Vasya最初没有钱,并且严格按照排队的顺序售票,他能向每个人出售一张票并找零吗?

如果Vasya可以向每个人出售一张票并找零,则返回YES。否则返回编号

我的代码:

function tickets(peopleInLine) {
  var speakVasya = "";
  var vasyaValue = 0;
  for (var i = 0; i < peopleInLine.length; i++) {
    if (peopleInLine[i] - 25 > vasyaValue) {
      speakVasya = "NO";
      break;
    } else {
      vasyaValue += 25;
      speakVasya = "YES";
    }
  }
  document.write(speakVasya);
}

tickets([25, 25, 50]);

现场演示https://jsfiddle.net/py234z11/1/

我的问题是,根据codewars,我的解决方案通过了7次测试,但在2次测试中失败了,但我不明白是哪一次,因为它没有给出放入tickets函数的争论。

计算他持有的金额是不够的——你需要跟踪账单的数量。

例如,如果你有一张100美元的钞票,你不能为有50美元或100美元钞票的人找零,你需要特定的钞票(25美元的钞票可以找零50美元,25美元和50美元或三张25美元的纸币可以找零100美元钞票)。

因此,与其记录收集的总金额,不如记录收集的账单数量。

我的C#解决方案,已编辑

public static string CanSellTickets(int[] peopleInLine) {
        int count25 = 0;
        int count50 = 0;
        for (var i = 0; i < peopleInLine.Length; i++) {
            if (peopleInLine[i] == 25) {
                count25++;
            }
            else if (peopleInLine[i] == 50) {
                if (count25 == 0) {
                    return "NO";
                }
                else {
                    count25--;
                    count50++;
                }
            }
            else if (peopleInLine[i] == 100) {
                if (count50 >= 1 && count25 >= 1) {
                    count25--;
                    count50--;
                }
                else if (count50 == 0 && count25 >= 3) {
                    count25 = count25 - 3;
                }
                else {
                    return "NO";
                }
            }
        }
        return "YES";
    }