zoukankan      html  css  js  c++  java
  • 【蓝桥杯】泊松分酒(穷举递归)

    题目:

    泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布。

    有一次闲暇时,他提出过一个有趣的问题,后称为:“泊松分酒”。在我国古代也提出过类似问题,遗憾的是没有进行彻底探索,其中流传较多是:“韩信走马分油”问题。

    有3个容器,容量分别为12升,8升,5升。其中12升中装满油,另外两个空着。要求你只用3个容器操作,最后使得某个容器中正好有6升油。

    只有b2瓶子为空时,b1才往b2瓶子里倒酒
    只有瓶子b3为空时,b2才往b3瓶子里倒酒
    只有瓶子b3为满时,b3才往b1瓶子里倒酒

    #include<iostream>
    using namespace std;
    int b1=12;
    int b2=8;
    int b3=5;
    int m=6;//目标酒量 
    /*
    bb1 the wine in b1 now
    bb2 the wine in b2 now
    bb3 the wine in b3 now
    */
    void backBottle(int bb1,int bb2,int bb3)
    {
    	cout<<"bb1:"<<bb1<<" ";
    	cout<<"bb2:"<<bb2<<" ";
    	cout<<"bb3:"<<bb3<<endl;
    	if(bb1 ==m || bb2 ==m || bb3 ==m)//分出目标酒量
    	 {
    			cout<<"ok"<<m;
    			return;
    		}
    		if(bb2!=0&&bb3!=b3) //b3not enough
    		{
    			if(bb2+bb3<=b3) // if bb2+bb3<=b3,then put bb2 in bb3  go
    			{
    				backBottle(bb1,0,bb2+bb3);
    			}else // if bb2+bb3>b3,then let bb2 -(b3-bb3) ,with b3 go 
    			{
    				backBottle(bb1,bb2-(b3-bb3),b3);
    			}
    		}else if(bb3 ==b3) //if now = target  begin put bb1 from bb3
    		{
    			if(bb3+bb1<=b1)//if sum(bb3+bb1)<=b1 
    			{
    				backBottle(bb1+bb3,bb2,0); //all of them put in b1
    			}else //if b1 not enough space  
    			{
    				backBottle(b1,bb2,bb3-(b1-bb1));//use b3  to save the more wine
    			}
    		}else if(bb2==0) {
    			if(bb1<=b2) {
    				backBottle(0,bb1,bb3);
    			}else {
    				backBottle(bb1-b2,b2,bb2+bb3);
    			}
    		}
    	}
    int main()
    {   int a,b,c;
        cin>>a;
        cin>>b;
        cin>>c;
    	backBottle(a,b,c);
     } 
    
  • 相关阅读:
    Python笔记 —— 使用open打开和操作txt文件
    Python笔记 —— 文件路径
    Python笔记 —— 四种容器(列表,元组,字典,集合)
    C++笔记 —— 异常
    C++笔记 —— map常用方法
    C++笔记 —— 在模板类中重载操作符
    C++笔记 —— vector常用方法
    C++笔记 —— 强制类型转换
    TCP连接三次握手四次挥手
    HashMap中自定义对象key,实现hashcode与equal
  • 原文地址:https://www.cnblogs.com/AmosAlbert/p/12832327.html
Copyright © 2011-2022 走看看