等分液体 C++

        问题描述:等分液体,在一个瓶子中装有8(N偶数)升汽油,要平均分成两份,但只有一个装3(N / 2 - 1)升的量杯和装5(N / 2 + 1)升的量杯(都没有刻度)。打印出所有把汽油分成两等分的操作过程。若无解打印“NO”,否则打印操作过程。

        解法:无论面对什么困难,微笑的面对他,战胜困难的最好办法就是数学最优解。奥利奥!!----著名诗人,鲁迅曾经说过。

        当然我们没有例子是没有办法快速理解的。比如说葛优大爷有八根头发。你只有两个手指头,大拇指一次可以摸5根,小拇指一次可以摸三根。怎么摸出来四根呢?你大拇指黏五根,小拇指一撮,剩两根。你拿了出来。再来一次,正好四根,满足要求!!!.所以我们就将2*N偶数跟头发转化成了存在多少个2, 3, 5的问题。以下是代码实现:


#include <iostream>
using namespace std;

void middle(int n) {
    int t = 0;
    for(int i = 0; i <= n / 4; i ++) {
        for(int j = 0; j <= n / 6; j ++) {
            for(int k = 0; k <= n / 10; k ++) {
                if(2 * i + 3 * j + 5 * k == n / 2) {//find n / 2 consider:i:2 j:3 k:5
                    if(i && !j && !k) {
                        t ++;
                        cout << "方案" << t << ": \n";
                        cout << "步骤一:将从原来装有" << n << "升油的瓶子倒5升油进5升的量筒,然后再把容量为5升量筒的油倒3升油到容量为3升的量筒最后再将其剩下油倒进相关容器的过程执行" << i << "次\n";
                    }
                    else if(!i && j && !k) {
                        t ++;
                        cout << "方案" << t << ": \n";
                        cout << "步骤一:将从原来装有" << n << "升油的瓶子倒3升油进容量3升的量筒然后再将其倒进相关容器的过程执行" << j << "次\n";
                    }
                    else if(!i && !j && k) {
                        t ++;
                        cout << "方案" << t << ": \n";
                        cout << "步骤一:将从原来装有" << n << "升油的瓶子倒5升油进容量5升的量筒然后再将其倒进相关容器的过程执行" << k << "次\n";
                    }
                    else if(i && j && !k) {
                        t ++;
                        cout << "方案" << t << ": \n";
                        cout << "步骤一:将从原来装有" << n << "升油的瓶子倒5升油进5升的量筒,然后再把容量为5升量筒的油倒3升油到容量为3升的量筒最后再将其剩下油倒进相关容器的过程执行" << i << "次\n";
                        cout << "步骤二:将从原来装有" << n << "升油的瓶子倒3升油进容量3升的量筒然后再将其倒进相关容器的过程执行" << j << "次\n";
                    }
                    else if(i && !j && k) {
                        t ++;
                        cout << "方案" << t << ": \n";
                        cout << "步骤一:将从原来装有" << n << "升油的瓶子倒5升油进5升的量筒,然后再把容量为5升量筒的油倒3升油到容量为3升的量筒最后再将其剩下油倒进相关容器的过程执行" << i << "次\n";
                        cout << "步骤二:将从原来装有" << n << "升油的瓶子倒5升油进容量5升的量筒然后再将其倒进相关容器的过程执行" << k << "次\n";
                    }
                    else if(!i && j && k) {
                        t ++;
                        cout << "方案" << t << ": \n";
                        cout << "步骤一:将从原来装有" << n << "升油的瓶子倒3升油进容量3升的量筒然后再将其倒进相关容器的过程执行" << j << "次\n";
                        cout << "步骤二:将从原来装有" << n << "升油的瓶子倒5升油进容量5升的量筒然后再将其倒进相关容器的过程执行" << k << "次\n";
                    }
                    else {
                        t ++;
                        cout << "方案" << t << ": \n";
                        cout << "步骤一:将从原来装有" << n << "升油的瓶子倒5升油进5升的量筒,然后再把容量为5升量筒的油倒3升油到容量为3升的量筒最后再将其剩下油倒进相关容器的过程执行" << i << "次\n";
                        cout << "步骤二:将从原来装有" << n << "升油的瓶子倒3升油进容量3升的量筒然后再将其倒进相关容器的过程执行" << j << "次\n";
                        cout << "步骤三:将从原来装有" << n << "升油的瓶子倒5升油进容量5升的量筒然后再将其倒进相关容器的过程执行" << k << "次\n";
                    }
                }
            }
        }
    }
    if(!t) {
        cout << "No way!" << endl;
        return ;
    }
    cout << "共有" << t << "种解决方法" << endl;
}
int main() {
    int n;
    cin >> n;
    while(n % 2) {
        cout << "Error, next one! :";
        cin >> n;
    }
    middle(n);
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值