试题 算法训练 找零钱、
-
资源限制
时间限制:1.0s 内存限制:256.0MB
-
问题描述
有n个人正在饭堂排队买海北鸡饭。每份海北鸡饭要25元。奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25、 50、100元),而且饭堂阿姨一开始没有任何零钱。请问饭堂阿姨能否给所有人找零(假设饭堂阿姨足够聪明)
-
输入格式
第一行一个整数n,表示排队的人数。
接下来n个整数a[1],a[2],...,a[n]。a[i]表示第i位学生手里钞票的价值(i越小,在队伍里越靠前)
-
输出格式
输出YES或者NO
-
样例输入
4
25 25 50 50
-
样例输出
YES
-
样例输入
2
25 100
-
样例输出
NO
-
样例输入
4
25 25 50 100
-
样例输出
YES
-
数据规模和约定
n不超过1000000
-
思路:定义三个变量分别纪录阿姨手中的25,50,100钞票数量;模拟题中场景,假设阿姨手中钞票可以为负(其实是找不开),最后判断各面值钞票数是否都为非负数即可。
-
代码如下:
int n, a[MAX], c1 = 0, c2 = 0, c3 = 0;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
int i = 0;
while (i < n){
if (a[i] == 25)
c1++;
else if (a[i] == 50){
c2++; c1--;
}
else if (a[i] == 100){
c3++;
if (c2 > 0 && c1 > 0){
c2--; c1--;
}
else if (c2 == 0 && c1 > 0)
c1 = c1 - 3;
}
if (c1 < 0 || c2 < 0 || c3 < 0){
cout << "NO" << endl;
break;
}
i++;
}
if (i == n)
cout << "YES" << endl;