牛客竞赛语法入门班循环结构习题 托米历险记

前言

这题我在CSDN上和牛客上看到好多写错了的但是AC了的……所以特意来写一篇解法。

先放上链接:(没写的可以去写一下)牛客竞赛语法入门班循环结构习题_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)

我的方法

#include<iostream>
using namespace std;

int n, money, a = 0, b = 0;
int main() {
	cin >> n;
	for (int i = 0;i < n;i++) {
		cin >> money;
		if (money == 25)a++;
		else if (money == 50) {
			b++;
			a--;
			if (a < 0) {
				printf("NO");
				return 0;
			}
		}
		else if(a>0&&b>0){
			a--;
			b--;
		}
		else {
			a -= 3;
			if (a < 0) {
				printf("NO");
				return 0;
			}
		}
	}
	printf("YES");
	return 0;
}

思路:

变量a和b分别存放25元和50元的数量,每次输入一个人交的钱后判断要怎么零钱。如果一个人交了50元,那么我只能给他25元,这时25元数量减一;如果一个人交100元,我有两种方式(很多解答忽略了这一点但是过了,咱也不知道咋回事)找零钱,一种是找一张50和一张25,另一种是找三张25,但凡有一种可行这次就能找零成功。途中如果25元数量小于零则整个找零过程失败。(这里为什么没有判断50是否小于0呢?你再看看,我是在b>0也就是存在50的情况下才把50交出去,所以50不可能小于零)

最后

当然这个写法避开了很多写法会犯的错误,但是我的方法也可能存在错误,欢迎指出。

不过至少我能想到的例子下,这种方法都是可行的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值