1873·混和可乐

题目描述

有三个小朋友一起聚会,各自带了一些饮料,他们突发奇想,把这些饮料混合一下,可能会产生特别的味道。于是他们将三个杯子编为 1、2、3 号,每个杯子可能有不同的容积,最开始装入的饮料也可能并没有装满。

     他们混合的方法是这样的:
     先从 1 号杯倒入 2 号杯,然后从 2 号杯倒入 3 号杯,再从 3 号杯倒入 1 号杯,如此循环下去,他们想知道这样操作 n次后,三个杯中的饮料会有多少。

    注意:从 a杯倒入 b杯的时候,会尽量倒出更多的饮料,直到 a杯被倒空或 b 杯被倒满。

输入

第一行一个数 n ,表示操作的次数(1<=n<=105)。
接下来三行,每行包含两个空格分隔的整数(两个整数为不超过 109 的正整数),分别表示 1 到 3 号杯的容积和最开始的饮料量。

输出

三行,分别表示 1 到 3 号杯操作 n次后各自的饮料量。

输入输出样例

3
10 3
11 4
12 5
10
0
2

基本思路

        此题需要一个周期,在判断周期内否加起来是否大于下一个组数容量的最大值,进行取舍依次循环,得出答案,具体如下:

        首先我们需要实现自动循环,因为它最大只有3,所以除3保留原数,保留原数后在加上1,就可以实现自动循环。

		q=p%3+1

        其次,就到对容量的判断了,只需要对数减去的数加上原来的数即可 。

	for(int i=1;i<=n;i++){
		q=p%3+1;
		if(b[q]+b[p]>a[q]){
			b[p]=b[p]+b[q]-a[q];
			b[q]=a[q];
		}else{
			b[q]+=b[p];
			b[p]=0;
		}
		p=q;
	}

        最后输出

#include<bits/stdc++.h>
using namespace std;
int n,a[4],b[4],p=1,q;
int main(){
	cin>>n;
	for(int i=1;i<=3;i++){
		cin>>a[i]>>b[i];
	}
	for(int i=1;i<=n;i++){
		q=p%3+1;
		if(b[q]+b[p]>a[q]){
			b[p]=b[p]+b[q]-a[q];
			b[q]=a[q];
		}else{
			b[q]+=b[p];
			b[p]=0;
		}
		p=q;
	}
	for(int i=1;i<=3;i++){
		cout<<b[i]<<endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值