• 韩信走马分油


    https://blog.csdn.net/wr132/article/details/44411221

    首先定义一套规则:

    题目中的瓶子总共有三种,最大的A,中等的B,最小的C,我们规定:

    最大瓶子只能往中等的瓶子倒;(若中等的瓶子为空)

    中等的瓶子只能往最小的瓶子倒;(若最小的瓶子不满)

    最小的瓶子只能往最大的瓶子倒;(若最小的瓶子已满)

    145.韩信走马分油 (15分)
    C时间限制:3000 毫秒 | C内存限制:3000 Kb
    题目内容:
    泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。有许多著名的公式定理以他的名字命名,比如概率论
    中著名的泊松分布。 有一次闲暇时,他提出过一个有趣的问题,后称为:“泊松分酒”。在我国古代也提出过类似问题,遗憾
    的是没有进行彻底探索,其中流传较多是:“韩信走马分油”问题。 有3个容器,容量分别为12升,8升,5升。其中12升中装
    满油,另外两个空着。要求你只用3个容器操作,最后使得某个容器中正好有6升油。 下面的列表是可能的操作状态记录:12,0,0
    4,8,0
    4,3,5
    9,3,0
    9,0,3
    1,8,3
    1,6,5
    每行3个数据,分别表示12,8,6升容器中的油量
    第一行表示初始状态,第二行表示把12升倒入8升容器后的状态,第三行是8升倒入5升,...
    当然,同一个题目可能有多种不同的正确操作步骤。 本题目的要求是,请你编写程序,由用户输入:各个容器的容量,开始的
    状态,和要求的目标油量,程序则通过计算输出是否可能分成功-“Y”,“N”。
    例如,用户输入:
    12,8,5,12,0,0,6
    用户输入的前三个数是容器容量(由大到小),接下来三个数是三个容器开始时的油量配置,最后一个数是要求得到的油量(放在
    哪个容器里得到都可以) 则程序可以输出“Y”
    输入描述
    各个容器的容量,开始的状态,和要求的目标油量

    输出描述
    是否可能分成功-“Y”,“N”

    输入样例
    12,8,5,12,0,0,6

    输出样例
    Y

    #include <stdio.h>
    int main(){
        int A, B, C, a, b, c, t;
        scanf("%d,%d,%d,%d,%d,%d,%d", &A, &B, &C, &a, &b, &c, &t);
        int aa = a, bb = b, cc = c;
        bool flag = true;
        while(aa != t && bb != t && cc != t){
            if(bb == 0){
                if(aa >= B){
                    aa -= B;
                    bb = B;
                }else{
                    aa = 0;
                    bb = aa;
                }
            }
            if(cc < C){
                int m = C - cc;
                if(bb >= m){
                    cc = C;
                    bb -= m;
                }else{
                    cc += bb;
                    bb = 0;
                }
            }
            if(cc == C){
                int m = A - aa;
                if(m >= cc){
                    aa += cc;
                    cc = 0;
                }else{
                    aa += cc;
                    cc -= m;
                }
            }
            if(aa == t || bb == t || cc == t){
                printf("Y
    ");
                break;
            }
            if(aa == a && bb == b && cc == c){  //又回到了原状态 
                printf("N
    ");
                flag = false;
                break; 
            }
        } 
        return 0;
    }
    View Code
  • 相关阅读:
    Cesium中的坐标系及转换
    Cesium Workshop
    window.postMessage 跨窗口,跨iframe javascript 通信
    VUE课程参考---7、跑马灯效果
    VUE课程---9、事件绑定v-on
    VUE课程---8、属性绑定v-bind
    VUE课程---7、解决插值表达式闪烁问题
    小谈chrome调试命令:console.log的使用
    Hadoop平台配置总结
    hadoop 关闭进程时报错no 进程 to stop
  • 原文地址:https://www.cnblogs.com/DDiamondd/p/10745087.html
Copyright © 2020-2023  润新知