zoukankan      html  css  js  c++  java
  • 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<<"输入两个杯子的容量及需要量出的水量:
    ";
    	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<<"
    
    逆容差算法:小杯子没水就装满水,大杯子水满了就倒掉,小杯子有水就往大杯子倒。然后判断大杯子水是否满足条件,不满足就继续
    
    ";
    	if(a > b){
    		tmp = a;
    		a = b;
    		b = tmp;
    	}
    	min = a;//小杯子的容量
    	max = b;//大杯子的容量
    	curMin = 0;//当前小杯子里面有多少水
    	curMax = 0;//当前大杯子里面有多少水
    	//循环判断大杯子的水是否满足条件
    	cout<<"当前小杯子有"<<curMin<<"升水,当前大杯子有"<<curMax<<"升水
    ";
    	while(curMax != need){
    		if(curMin == 0){
    			cout<<"小杯子没水了,装满水
    ";
    			curMin = min;
    		}
    		else if (curMax == max){
    			cout<<"大杯子水满了,全倒掉
    ";
    			curMax = 0;
    		}
    		else{
    			//将小杯子的水倒给大杯子,判断能倒多少水过去
    			tmp = max - curMax;
    			tmp = tmp > curMin ? curMin : tmp;
    			cout<<"将小杯子的水倒"<<tmp<<"升给大杯子
    ";
    			curMax += tmp;
    			curMin -= tmp;
    		}
    		cout<<"当前小杯子有"<<curMin<<"升水,当前大杯子有"<<curMax<<"升水
    ";
    	}
    	cout<<"当前大杯子的水满足条件,程序退出
    
    ";
    }
    void print2(int a, int b, int need){
    	int tmp,min,max,curMin,curMax;
    	cout<<"
    
    顺容差算法:大杯子没水就装满水,小杯子水满了就倒掉,大杯子有水就往小杯子倒。然后判断大杯子水是否满足条件,不满足就继续
    
    ";
    	if(a > b){
    		tmp = a;
    		a = b;
    		b = tmp;
    	}
    	min = a;//小杯子的容量
    	max = b;//大杯子的容量
    	curMin = 0;//当前小杯子里面有多少水
    	curMax = 0;//当前大杯子里面有多少水
    	//循环判断大杯子的水是否满足条件
    	cout<<"当前小杯子有"<<curMin<<"升水,当前大杯子有"<<curMax<<"升水
    ";
    	while(curMax != need){
    		if(curMax == 0){
    			cout<<"大杯子没水了,装满水
    ";
    			curMax = max;
    		}
    		else if (curMin== min){
    			cout<<"小杯子水满了,全倒掉
    ";
    			curMin = 0;
    		}
    		else{
    			//将大杯子的水倒给小杯子,判断能倒多少水过去
    			tmp = min- curMin;
    			tmp = tmp > curMax ? curMax : tmp;
    			cout<<"将大杯子的水倒"<<tmp<<"升给小杯子
    ";
    			curMax -= tmp;
    			curMin += tmp;
    		}
    		cout<<"当前小杯子有"<<curMin<<"升水,当前大杯子有"<<curMax<<"升水
    ";
    	}
    	cout<<"当前大杯子的水满足条件,程序退出
    
    ";
    }
    

      

  • 相关阅读:
    C# Thread Lambda
    C#中Invoke的用法
    C#抽象类和抽象方法
    SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用
    改变自己的128种方法
    小技巧
    Linux学习第一章作业.zxs
    Linux学习第二、三章作业.zxs
    Linux 系统管理 04—账号管理
    Mysql中的in和find_in_set的区别?
  • 原文地址:https://www.cnblogs.com/chenkh/p/5629261.html
Copyright © 2011-2022 走看看