C++两水杯量出所需水量的小算法

有2个杯子,分别为5升和9升,在一个水池里有无限的水源,怎么才能在水池里拿到6升水呢

#include<iostream>
using namespace std;
void print1(int,int,int);
void print2(int,int,int);

int main(){
	int a, b, need;
	cout<<"输入两个杯子的容量及需要量出的水量:\n";
	cin>>a>>b>>need;
	print1(a,b,need);
	print2(a,b,need);
	system("pause");
	return 0;
}

void print1(int a, int b, int need){
	int tmp,min,max,curMin,curMax;
	cout<<"\n\n逆容差算法:小杯子没水就装满水,大杯子水满了就倒掉,小杯子有水就往大杯子倒。然后判断大杯子水是否满足条件,不满足就继续\n\n";
	if(a > b){
		tmp = a;
		a = b;
		b = tmp;
	}
	min = a;//小杯子的容量
	max = b;//大杯子的容量
	curMin = 0;//当前小杯子里面有多少水
	curMax = 0;//当前大杯子里面有多少水
	//循环判断大杯子的水是否满足条件
	cout<<"当前小杯子有"<<curMin<<"升水,当前大杯子有"<<curMax<<"升水\n";
	while(curMax != need){
		if(curMin == 0){
			cout<<"小杯子没水了,装满水\n";
			curMin = min;
		}
		else if (curMax == max){
			cout<<"大杯子水满了,全倒掉\n";
			curMax = 0;
		}
		else{
			//将小杯子的水倒给大杯子,判断能倒多少水过去
			tmp = max - curMax;
			tmp = tmp > curMin ? curMin : tmp;
			cout<<"将小杯子的水倒"<<tmp<<"升给大杯子\n";
			curMax += tmp;
			curMin -= tmp;
		}
		cout<<"当前小杯子有"<<curMin<<"升水,当前大杯子有"<<curMax<<"升水\n";
	}
	cout<<"当前大杯子的水满足条件,程序退出\n\n";
}
void print2(int a, int b, int need){
	int tmp,min,max,curMin,curMax;
	cout<<"\n\n顺容差算法:大杯子没水就装满水,小杯子水满了就倒掉,大杯子有水就往小杯子倒。然后判断大杯子水是否满足条件,不满足就继续\n\n";
	if(a > b){
		tmp = a;
		a = b;
		b = tmp;
	}
	min = a;//小杯子的容量
	max = b;//大杯子的容量
	curMin = 0;//当前小杯子里面有多少水
	curMax = 0;//当前大杯子里面有多少水
	//循环判断大杯子的水是否满足条件
	cout<<"当前小杯子有"<<curMin<<"升水,当前大杯子有"<<curMax<<"升水\n";
	while(curMax != need){
		if(curMax == 0){
			cout<<"大杯子没水了,装满水\n";
			curMax = max;
		}
		else if (curMin== min){
			cout<<"小杯子水满了,全倒掉\n";
			curMin = 0;
		}
		else{
			//将大杯子的水倒给小杯子,判断能倒多少水过去
			tmp = min- curMin;
			tmp = tmp > curMax ? curMax : tmp;
			cout<<"将大杯子的水倒"<<tmp<<"升给小杯子\n";
			curMax -= tmp;
			curMin += tmp;
		}
		cout<<"当前小杯子有"<<curMin<<"升水,当前大杯子有"<<curMax<<"升水\n";
	}
	cout<<"当前大杯子的水满足条件,程序退出\n\n";
}

  

时间: 2024-08-05 04:50:13

C++两水杯量出所需水量的小算法的相关文章

vi应用:使用v和s命令两步提取出想要的内容

本文以提出spring中配置文件applicationContext.xml中所有bean的id为例,讲解如何使用vi的v和s命令两步提取出想要的内容. applicationContext.xml文件内容如下: <?xml version = "1.0" encoding = "UTF-8" ?> <beans xmlns ="http://www.springframework.org/schema/beans" xmlns

STL--H - Black Box(两个优先队列,求第k小的值)

H - Black Box Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Description Our Black Box represents a primitive database. It can save an integer array and has a special i variable. At the initial moment Black

找出该树中第二小的值--思路及算法实现

在二叉树中最重要的操作莫过于遍历,即按照某一顺序访问树中的所有节点.二叉树的前序遍历.中序遍历.后序遍历都有递归和循环两种不同的实现方法.每种遍历的递归实现都比循环实现要简洁很多.下面分享一个关于二叉树遍历到笔试题: 给定一棵完全二叉树,即树中的每一个节点有2个子节点或者没有子节点,每一个节点的值小于等于它的子节点的值.请找出该树中第二小的值.如果没有第二小的值,请给出-1: 解题思路:画图举例解决问题,如下图所示,根节点是1,每一个节点的值小于等于它的子节点的值,访问根节点后再先后访问左子树和

两天撸一个天气应用微信小程序

这是一个完整的已经线上运行的天气应用小程序,点击可查看源码,可随意 star.也可以扫描下方的小程序码直接体验. 效果图: 说明 鸣谢:pure 天气 APP:首页样式借鉴了 pure天气 APP.如侵删. 数据来源 地理编码.天气数据均来自百度地图开放平台.个人开发完全免费,有对应的小程序 sdk,加入即可,但是返回的天气数据较少. 运行前准备 注册微信小程序,获取 appid 注册百度地图开放平台开发者,创建应用,获取 ak(其他配置自行查看) 在 app.js 中替换 globalData

特殊的日子(2015年5月1日劳动节)纪念回归和新的征程,用LRU和LFU两个小算法原理和区别来抛砖引玉

很久没有写过新的博客了,原因有很多,冠冕堂皇的理由就是工作忙,生活忙,各种累,直白一点其实就是变懒了,所以没有写. 在沉寂了这么长一段时间过后,终于又要重新出发了,对于自己当前的状态,觉得首先要有所沉淀,然后就是要放空自己,唯有放空自己方能继续进步. 以后一段时间更新的博客内容主体是与Android Framework相关的疑难问题分析.机制实现的原理.源代码调用分析,然后伴有一些常用的小算法,语言特性,程序原理等. 今天就先介绍LRU和LFU这两个在Android的Framework以及App

编程题:指针变量作函数参数,将两个整数按由大到小的顺序输出。

分析:通过指针变量作函数参数,无需返回值和全局变量,主调函数就可以使用被调用函数改变的值. #include<stdio.h> void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } void main() { int a=3,b=4; int *ptr1,*ptr2; ptr1=&a;ptr2=&b; if(a<b) swap(ptr1,ptr2); printf("%d,%d\n",

js制作带有遮罩弹出层实现登录小窗口

要实现的效果如下 点击“登录”按钮后,弹出登录小窗口,并且有遮罩层(这个名词还是百度知道的,以前只知道效果,却不知道名字) 在没有点击“登录”按钮之前登录小窗口不显示,点击“登录”按钮后小窗口显示,并且遮罩层笼罩整个页面,使整个页面的其他元素暂时失去行为. 遮罩层的实现:相对于body绝对定位,宽度和高度都和body相同,并且有一定的透明度,使得下面的元素能够被看到.原先的元素的z-index为0,遮罩层的z-index在弹出登录小窗口和原先元素的之间. 说的不是很清楚,还是看代码吧! <!DO

每天一个小算法(2)----合并两个有序链表

每天一个小算法还是有点没时间,尽量抽出时间写一写. 今天是合并有序的链表,对单链表有点忘了,尤其是指针指来指去的,有点晕,幸好基础还算好,想了想还是能想回来. 代码使用随机数函数生成一个链表,然后对链表排序,最后合并链表并打印,删除链表的函数于算法无关紧要,所以未实现^_^. 在Linux/g++下编译运行成功. 合并思路:和合并数组有些类同,比较两个节点的元素大小然后将小的摘下来尾插到链表bList中,然后指针指向下一个节点,最后直接把非空的链表合并到bList的末尾. 1 #include

java通过经纬度计算两个点的之间的距离的算法

通过两个点的经纬度计算距离 从google maps的脚本里扒了段代码,没准啥时会用上.大家一块看看是怎么算的.private const double EARTH_RADIUS = 6378.137;private static double rad(double d){   return d * Math.PI / 180.0;} public static double GetDistance(double lat1, double lng1, double lat2, double ln