莆田市C++专项选拔第一轮题3

文章提供了倒水问题的代码实现,包括输入样例和输出样例,并解析了关键步骤。展示了如何用C++编程解决该问题。
摘要由CSDN通过智能技术生成

题3:倒水

【题目描述】
现给你 2 个水杯,容量分别为 a 和 b。最开始时,1 号水杯和 2 号水杯都是空的。
现你要按照如下规则操作倒水 k 次:
如果 1 号杯子水是满的,则将 1 号杯子中的水全部倒掉。
否则如果 2 号杯子是空的,则将 2 号杯子装满水。
否则,将 2 号杯子的水全部倒入 1 号杯子,直到 1 号杯子装满水或 2 号杯子水为空。
请问 k 次操作后,1 号杯子和 2 号杯子中的水量分别是多少?
【输入】
一行三个整数 a, b, k,分别表示 1 号杯⼦的容量,2 号杯子的容量和操作次数。
【输出】
一行两个整数,分别表示 1 号杯子和 2 号杯子中的水量。
【输入样例1】

3 5 2

【输出样例1】

3 2

第一次操作,给 2 号杯子装满水,水量分别为 0, 5;
第二次操作,将 2 号杯子的水全部倒入 1 号杯子,直到 1 号杯子装满水,水量分别为 3, 2。
【输入样例2】

2 6 3

【输出样例2】

0 4

【数据规模及约定】
对于20%的数据,k=1。
另有30%的数据,b是a的倍数。
对于100%的数据,1≤a,b≤105,1≤k≤105

题目解析:

根据题意,前两步操作非常简单,重点在第三步,2号杯的水倒入1号杯会出现两种情况:

  • 2号杯现有水量大于等于1号杯时,1号杯水量=a,2号杯水量剩余水量为原有水量减去倒入1号杯的水量;
  • 2号杯现有水量小于1号杯时,1号杯水量<a,为原有水量加上2号杯水量,2号杯水量为0。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,k,a1=0,b1=0;
	cin>>a>>b>>k;
	while(k--){
		if(a1==a){
			a1=0;
		}else if(b1==0){
			b1=b;
		}else{
			int t=a-a1;   //1号杯目前可装入的水量
			if(b1>=t){	//如果2号杯的水量足够装满1号杯
				b1-=t;	//2号杯减去装入1号杯的水量
				a1+=t;	//1号杯加上2号杯倒入的水量
			}else{	//如果2号杯的水量不够装满1号杯
				a1+=b1;	//1号杯加上2号杯倒入的水量
				b1=0;	//2号杯清空
			}
		}
	}
	cout<<a1<<" "<<b1<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lpstudio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值