Vasya - Clerk

题目

he new “Avengers” movie has just been released! There are a lot of people at the cinema box office standing in a huge line. Each of them has a single 100, 50 or 25 dollar bill. An “Avengers” ticket costs 25 dollars.

Vasya is currently working as a clerk. He wants to sell a ticket to every single person in this line.

Can Vasya sell a ticket to every person and give change if he initially has no money and sells the tickets strictly in the order people queue?

Return YES, if Vasya can sell a ticket to every person and give change with the bills he has at hand at that moment. Otherwise return NO.

Examples:

1
2
3
tickets([25, 25, 50]) // => YES 
tickets([25, 100]) // => NO. Vasya will not have enough money to give change to 100 dollars
tickets([25, 25, 50, 50, 100]) // => NO. Vasya will not have the right bills to give 75 dollars of change (you can't make two bills of 25 from one of 50)

思路

很菜,用的多重判断。需要注意以下几点:

  • 仅仅是数值上够的话是不行的,首先要注意自己手里的钞票够不够用
  • 优先使用50的钞票,否则会出现明明够但是返回NO的情况

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function tickets(peopleInLine) {
console.log(peopleInLine)
var notes = {'25': 0, '50': 0, '100': 0};
for (var i in peopleInLine) {
if (peopleInLine[i] === 25) {
notes['25'] += 1;
} else if (peopleInLine[i] === 50) {
if (notes['25'] > 0) {
notes['50'] += 1;
notes['25'] -= 1;
} else {
return 'NO';
}
} else {
if (notes['50'] > 0 && notes['25'] > 0) {
notes['25'] -= 1;
notes['50'] -= 1;
notes['100'] += 1;

} else if (notes['25'] > 2) {
notes['25'] -= 3;
notes['100'] += 1;
} else {
return 'NO';
}
}
}
return "YES";
}