JavaScript-codewars刷题

题目意:一个电影院售票员在没有本金的情况下,进行售票,如果能够用收到的钱进行找零,则交易成功,如果整个队伍都能交易成功,返回YES,
否则,返回NO.根据介绍,创建一个判断该排队队伍能不能成功交易.
Sample:
 tickets([25, 25, 50]) // => YES
 tickets([25, 100]) // => NO.
 tickets([25, 25, 50, 50, 100]) // => NO. 

我的解决方案:
function tickets(peopleInLine) {
    var twentyFifth = [], fifty = [], hundred = [],flag='';
    for(var j=0;j<peopleInLine.length;j++){
        //给的钱不是25
        if(peopleInLine[j]!=25){
            //给了50
            if(peopleInLine[j]==50){
                //判断前面有没有钱可以找零
               if(twentyFifth.length>0){
                   //可以找零,则减去找零的,顺便将刚收的50收起来
                   twentyFifth.shift();
                   fifty.push(50);
                   flag= 'YES';
               }else{
                   flag= 'NO';
                   break;
               }
            }//给了100
            else if(peopleInLine[j]==100){
                //能不能找零成功
                if(twentyFifth.length>0 && fifty.length>0){
                    twentyFifth.shift();
                    fifty.shift();
                    hundred.push(100);
                    flag = 'YES';
                }
                else if(twentyFifth.length>=3){
                    twentyFifth.splice(0,3);//会改变原数组,返回删除的数所组成的数组
                    hundred.push(100);
                    flag = 'YES';
                } else{
                    flag= 'NO';
                    break;
                }
            }
        }else{
            twentyFifth.push(25);
            flag = 'YES';
        }
    }
    return flag;
}

codewars的最优答案:

function Clerk(name) {
    this.name = name;
    this.money = {
        25 : 0,
        50 : 0,
        100: 0
    };
    this.sell = function(element, index, array) {
        this.money[element]++;

        switch (element) {
            case 25:
                return true;
            case 50:
                this.money[25]--;
                break;
            case 100:
                this.money[50] ? this.money[50]-- : this.money[25] -= 2;
                this.money[25]--;
                break;
        }
        return this.money[25] >= 0;
    };
}

function tickets(peopleInLine){
    var vasya = new Clerk("Vasya");
    return peopleInLine.every(vasya.sell.bind(vasya)) ? "YES" : "NO";
}

自己编程过程中出现的问题

- 问题一:开始队列中某一个人能成功找零,直接return 'yes',程序不会判断后面的数据,直接返回yes了,导致程序出错.

- 问题二:问题二:忘记3个25元也能给100找零这一种情况.

- 问题三:只要出现不能找零的情况,就应该退出循环,直接return no'.

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值