题目描述:
学军电影院暑期档大片“学军熊猫”正在热映,票价25元,现在有很多oier即将来买票,oier都是极简主义者,因此每个人手里只有一张纸币,纸币的面值是100,50,25当中的一种,学军中学已经实现了自动售票,电影院门口放了一台自动售票机,但不巧的是,今天自动售票机里面没有零钱了,现在问你,已知n个oier所带的纸币的信息,以及他们到来的顺序,自动售票机能否在没有钱的情况下完成找钱功能。
(假设纸币投入机器后,会在下一个买票人之前,由工作人员换为对应数量的1元零钱。例如第一个人将1张25元的纸币投入机器后,在第二个人买票时,机器里是25个1元的零钱)
输入格式:
多组测试数据。
每组测试数据先输入一个n,表示买票的总人数,接下来一行输入n个正整数。表示每个人手里的纸币面值。
输出格式:
对于每组测试数据
输出”YES”,如果可以完成找钱功能
输出”NO”,如果不能完成找钱功能。
样例输入:
4 25 25 50 50 2 25 100 4 50 50 25 25
样例输出:
YES NO NO
约定:
1<=n<=10的5次幂
AC代码:
#include <iostream>
#include <vector>
using namespace std;
int cnt, n;
int main() {
while(cin >> n) {
vector <int>bills(n);
for (int i = 0; i < n; i++) {
cin >> bills[i];
}
int numOf25 = 0, numOf50 = 0;
bool flag = true;
for (int i = 0; i < n; i++) {
if (bills[i] == 25) {
numOf25++;
} else if (bills[i] == 50) {
if (numOf25 > 0) {
numOf25--;
numOf50++;
} else {
flag = false;
break;
}
} else if (bills[i] == 100) {
if (numOf50 > 0 && numOf25 > 0) {
numOf50--;
numOf25--;
} else if (numOf25 >= 3) {
numOf25 -= 3;
} else {
flag = false;
break;
}
}
}
if (flag) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
以上代码不是最简,希望有人能加工下代码,谢谢,886