容器里有10升油,现在只有两个分别能装3升和7升油的瓶子,需要将10 升油等分成2 个5 升油。程序输出分油次数最少的详细操作过程

news/2024/10/30 14:17:19/

引入

1、容器里有10升油,现在只有两个分别能装3升和7升油的瓶子,需要将10 升油等分成2 个5 升油。程序输出分油次数最少的详细操作过程。

思考

这题主要是要求了输出分油次数最少的操作,网上很多算法都是寻找可行解,没有找出最优解。
仔细分析这题发现思路很简单:
开始总共只有两种倒法,十升向7升的到,十升向3升的到,然后不回倒,下一步倒向另一个,当7升的倒满了之后,再回倒入10升的杯子中,进入循环,直到有解为止。
最终状态一定是10升的杯子有5升,7升的杯子有5升。

状态10升3升7升
初始1000
状态1730
状态2703
状态3433
状态4406
状态5136
状态6127
状态7820
状态8802
状态9532
状态10505

代码

这里只是简单实现了一下,复杂一点可以将结果保存到数组中,然后根据需求再输出。

#include <iostream>
using namespace std;//开始总共只有两种倒法,十升向7升的到,十升向3升的到,然后不回倒,下一步倒向另一个,直到有解为止
int pull(int m, int n) {int decaliter = 10,//十升的容器中有十升油a = 0,b = 0,total = 1;//表示步骤数while (decaliter != 5) { if (a == 0) { //第一步向3/7L杯子倒油decaliter -= m; a += m; cout << total++ << ": 10 L容器向 " << m << " L容器倒入 " << m << " L油" << endl;} if (a > 0 && b < n) {//3/7L杯子有油时倒入7/3L杯子 if (b + a <= n) {//如果n为7升,b+a小于7升,将3升倒入7升杯子中b += a;cout << total++ << ": " << m << " L容器向 " << n << " L容器倒入 " << a << " L油" << endl;a -= a; } else { //不然就为m是7升,b+a大于7升,,将3升倒入3升杯子中a -= n - b; cout << total++ << ": " << m << " L容器向 " << n << " L容器倒入 " << n - b << " L油" << endl;b = n; } } if (b == n) { //当7升容器倒满后,将7升倒回10升容器中b -= n;decaliter += n;cout << total++ << ": " << n << " L容器向 10 L容器倒入 " << n << " L油" << endl;}//最后状态一定是十升容器有5升,7升容器有5升if (m >= n) { if (a == 5) break; } else { if (b == 5)break; } }cout << "  10L容器中有 " << decaliter << " L油, " << m << " L容器中有 " << a << " L油, " << n << " L容器中有 " << b << " L油" <<"\n"<< endl;return --total; 
} 
int main() { int min;cout << "第 1 种方案:" << endl;min = pull(3, 7);cout << "第 2 种方案:" << endl; if (min > pull(7, 3))cout << "第 2 种方案步骤最少。"; else cout << "第 1 种方案步骤最少。"; return 0; 
}

拿到题目就找了一下CSDN,上面也有些博客写上了自己的思路,我直接将网址CP到下面了,以供大家参考。

https://blog.csdn.net/dufemt/article/details/80335300?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-7.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-7.no_search_link

https://blog.csdn.net/RAYFUXK/article/details/84776307?ops_request_misc=&request_id=&biz_id=102&utm_term=1%E3%80%81%E5%AE%B9%E5%99%A8%E9%87%8C%E6%9C%8910%E5%8D%87%E6%B2%B9%EF%BC%8C%E7%8E%B0%E5%9C%A8%E5%8F%AA%E6%9C%89%E4%B8%A4%E4%B8%AA%E5%88%86%E5%88%AB%E8%83%BD%E8%A3%853%E5%8D%87%E5%92%8C7%E5%8D%87%E6%B2%B9%E7%9A%84%E7%93%B6%E5%AD%90&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-84776307.nonecase&spm=1018.2226.3001.4187
https://blog.csdn.net/qq_44365861/article/details/109482281?ops_request_misc=&request_id=&biz_id=102&utm_term=1%E3%80%81%E5%AE%B9%E5%99%A8%E9%87%8C%E6%9C%8910%E5%8D%87%E6%B2%B9%EF%BC%8C%E7%8E%B0%E5%9C%A8%E5%8F%AA%E6%9C%89%E4%B8%A4%E4%B8%AA%E5%88%86%E5%88%AB%E8%83%BD%E8%A3%853%E5%8D%87%E5%92%8C7%E5%8D%87%E6%B2%B9%E7%9A%84%E7%93%B6%E5%AD%90&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-109482281.pc_search_result_hbase_insert&spm=1018.2226.3001.4187


http://www.ppmy.cn/news/573913.html

相关文章

如何用一个3L的桶和一个5L的桶, 量出4L水来?

遇到一个小趣味题&#xff1a; 一个水池&#xff0c;旁边有两个水桶&#xff0c; 一个装 3L 的水&#xff0c; 一个可装 5L 的水&#xff0c; 问:如何利用这两个桶&#xff0c; 精确的量出 4L 的水来&#xff1f; My Keys: 可分五步完成 &#xff0c;写了个步骤列表&#xf…

给你一个 5L 和 3L 桶,水无限多,怎么到出 4L。

智力题 给你一个 5L 和 3L 桶&#xff0c;水无限多&#xff0c;怎么到出 4L。 思考过程 先将 3L 的桶装满水&#xff0c;倒入 5L 的桶里。 再重新将 3L 的桶装满水&#xff0c;倒入 5L 的桶里&#xff0c;把 5 L 的桶装满后&#xff0c;这样 3L 的桶中就剩下 1L 的水了。 然后把…

log4j日志打印详解实战

1.为什么要使用log4j? Log4j是Apache的一个开放源代码项目&#xff0c;通过使用Log4j&#xff0c;我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等&#xff1b;我们也可以控制每一条日志的输出格式&am…

springboot配置log4j 并打印SQL

首先引入jar包依赖 <!--Log4J--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j</artifactId> </dependency> 因为springboot 默认有自己的日志管理机制 所以要排除一下springb…

imagej得到灰度图数据_ImageJ的高级使用方法

今天我们继续来聊一聊ImageJ的高阶使用技巧。 问题三、为什么总是全部圈起来的灰度值,有没有大神指导呢求助! 本问题涉及免疫印迹(Western Blot)分析,提问者不能分别得到每个条带的值。 灰度值0为纯黑,255为纯白,灰度值与光密度值(OD值)的关系如下图所示: 以灰度来统计WB…

【C++ 程序设计】第 5 章:类的继承与派生

目录 一、类的继承与类的派生 &#xff08;1&#xff09;继承的概念 &#xff08;2&#xff09;派生类的定义与大小 ① 派生类的定义 ② 派生类的大小 &#xff08;3&#xff09;继承关系的特殊性 &#xff08;4&#xff09;有继承关系的类之间的访问 &#xff08;5&am…

Log4j输出格式控制--log4j的PatternLayout参数含义以及详细配置

http://logging.apache.org/log4j/docs/api/org/apache/log4j/PatternLayout.html 参数说明例子%c列出logger名字空间的全称&#xff0c;如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间log4j配置文件参数举例输出显示媒介假设当前logger名字空间是"a.b.…

SpringBoot重点详解--log4j.properties配置详解与实例

################################################################################ #①配置根Logger&#xff0c;其语法为&#xff1a; # #log4j.rootLogger [level],appenderName,appenderName2,... #level是日志记录的优先级&#xff0c;分为OFF,TRACE,DEBUG,INFO,WA…