C++ 蓝桥杯之 找零钱

试题 算法训练 找零钱、

  • 资源限制

时间限制: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;

这道题总体而言比较简单,思路也很清晰。

代码仅供参考,可能不是很规范,望不弃!

加油!每天一篇!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值