母亲的奶牛(蓝桥杯,acwing每日一题)

题目描述:

农夫约翰有三个容量分别为 A,B,C升的挤奶桶。

最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。

有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。

这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。

请你编写一个程序判断,当 A 桶是空的时候,C 桶中可能包含多少升牛奶,找出所有的可能情况。

输入格式:

共一行,包含三个整数 A,B,C。

输出格式:

共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。

数据范围:

1≤A,B,C≤20

输入样例1:

8 9 10

输出样例1:

1 2 8 9 10

输入样例2:

2 5 10

输出样例2:

5 6 7 8 9 10

分析步骤:

  第一:拿到这道题目,我们可以知道我们有三个桶,里面只有C桶是满的,我们要将它倒入其他的木桶,只要A是空的,记录一下这时C木桶的牛奶量。我们可以用一个结构体,里面含有a,b,c三木桶的奶量,再用一个三维数组,记录下这三个木桶的所有情况。到时候只要A是为0并且这个三维数组能够遍历的到就代表会有这种情况,就输出C的值就可以。其中A桶a种情况,B桶b种情况,C桶c种情况,相乘共a*b*c种情况,那么这种情况下的最大时间复杂度是20*20*20,爆搜所有情况可行,那么现在的问题是共c桶奶,分别放入A,B,C即可

  第二:书写主函数,构建整体框架。

             先输入A,B,C这三个木桶的容量,在进入BFS去搜索,最终搜索完毕之后,用for循环一下找出A为0时并且这个数组能够遍历到的情况下,就输出c的值


int main()
{cin>>A>>B>>C;bfs();for (int c = 0; c <= C; c ++ )for (int b = 0; b <= B; b ++ )if (st[0][b][c]){printf("%d ", c);break;}return 0;
}

  第三:书写BFS函数

             各位,我们书写bfs函数都是采用队列来储存的,本文采用手写队列的方式。

             首先定义,首尾节点为0,将(0,0,c)放入队列,因为一开始只能是c木桶装满奶,其他两个木桶是没有奶的。最后将这个情况定义为true,用W[3](大写)来储存A,B,C三个木桶的容量。

             其次,进入while循环,只要队列不空就一直循环,用迭代器自动向后遍历。用for循环遍历三个木桶,这里是木桶i 将牛奶倒入 木桶j,不过自己不能将牛奶倒入自己。w[3](小写)代表现在的奶量,定义一个r用来动态更新,我们不能倒入超过 木桶i 现在的奶量,也不能倒入超过木桶j的剩余容量将他们两个取最小值。将木桶i倒出r 木桶j倒入r,定义a,b,c分别为三个木桶调整后的奶量。在判断一下是否出现过这种情况,如果没有出现过,就将此点入队,更新一下状态。

void bfs(){int hh = 0  , tt = 0 ; q[0] = {0,0,C};st[0][0][C] = true;int W[3] = {A,B,C};while(hh <= tt){auto t = q[hh++];for(int i = 0 ; i < 3 ; i ++){for(int j = 0 ; j < 3 ; j ++){if(i != j){int w[3] = {t.a,t.b,t.c};int r = min (w[i] , w[j] - w[i]);w[i] -= r, w[j] += r;int a = w[0], b = w[1], c = w[2];if (!st[a][b][c]){st[a][b][c] = true;q[ ++ tt] = {a, b, c};}}}}}
}

代码:

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 21, M = N * N * N;  // 数组的最大大小struct node {int a, b, c;  // 三个水壶的水量
} q[M];  // 用于存储状态的数组
int A, B, C;  // 三个水壶的容量
bool st[N][N][N];  // 用于标记访问过的状态void bfs() {int hh = 0, tt = 0;  // 队列头和尾的指针q[0] = {0, 0, C};  // 初始状态:第三个水壶满st[0][0][C] = true;  // 标记初始状态为已访问int W[3] = {A, B, C};  // 三个水壶的容量while (hh <= tt) {auto t = q[hh++];  // 出队下一个状态for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (i != j) {int w[3] = {t.a, t.b, t.c};  // 复制当前状态int r = min(w[i], w[j] - w[i]);  // 计算需要倒水的量w[i] -= r, w[j] += r;  // 更新水壶中的水量int a = w[0], b = w[1], c = w[2];  // 倒水后的新状态if (!st[a][b][c]) {st[a][b][c] = true;  // 标记为已访问q[++tt] = {a, b, c};  // 入队新状态}}}}}
}int main() {cin >> A >> B >> C;  // 读取三个水壶的容量bfs();  // 执行广度优先搜索for (int c = 0; c <= C; c++) {for (int b = 0; b <= B; b++) {if (st[0][b][c]) {printf("%d ", c);  // 输出可能的第三个水壶的水量break;}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日学习笔记:C++ STL 的无序容器(unordered_set、unordered_map)

定义 特性 能够快速查找元素 操作函数 负载系数 元素个数 / bucket个数 提供哈希函数 提供等价准则 方法一&#xff1a;重写元素的操作符 方法二&#xff1a;自定义函数对象 提供自定义哈希函数和等价准则例子 例一&#xff1a;传入函数对象 例二&#xff1a;传入lambda 检…

蓝桥杯2023省赛:矩阵总面积|模拟、数学(几何)

题目链接&#xff1a; 0矩形总面积 - 蓝桥云课 (lanqiao.cn) 说明&#xff1a; 参考文章&#xff1a;矩形总面积计算器&#xff1a;计算两个矩形的总面积&#xff0c;包括重叠区域_矩形r1的左下角坐标为x1, yl 、宽度为w1、高度为h1, 矩形r2的左下角坐标为x2,y2、宽-CSDN博客…

移卡 2023 年支付GPV超 2.88 万亿 龙头地位稳固

3月21日&#xff0c;中国领先的基于支付的科技平台——移卡有限公司&#xff08;以下简称“移卡”或“公司”&#xff0c;股份代号&#xff1a;09923.HK&#xff09;发布2023年年度业绩报告。与上年同期相比&#xff0c;移卡2023年收入同比增长15.6%&#xff0c;至人民币39.51亿…

Java代码基础算法练习-求一个三位数的各位平方之和-2024.03.21

任务描述&#xff1a; 输入一个正整数n&#xff08;取值范围&#xff1a;100<n<1000&#xff09;&#xff0c;然后输出每位数字的平方和。 任务要求&#xff1a; 代码示例&#xff1a; package march0317_0331;import java.util.Scanner;public class m240321 {public …

YOLOV5 改进:替换backbone为Swin Transformer

1、前言 本文会将YOLOV5 backbone更换成Swin Transformer 具体为什么这样实现参考上文:YOLOV5 改进:替换backbone(MobileNet为例)-CSDN博客 这里只贴加入的代码 训练结果如下: 2、common文件更改 在common文件中加入下面代码: 这里是swin transformer的实现,参考:…

如何申请免费通配符SSL证书

步骤1&#xff1a;了解免费通配符证书的选项 首先&#xff0c;您需要了解哪些机构或项目提供免费的通配符证书。目前绝大部分CA机构只提供免费的单域名证书&#xff0c;只有少数服务商提供商可以提供免费的通配符证书&#xff0c;比如JoySSL。 免费通配符证书申请地址https://…

GPT2从放弃到入门(二)

引言 本文介绍如何利用GPT2从零训练一个多轮对话聊天机器人&#xff0c;按照本文的思路可以轻松地训练自己的数据。 数据处理 ⚠️ 这是本文的核心部分&#xff0c;其他的内容甚至可以不用看。 本小节阐述多轮对话数据的处理。 数据来自网上的一份开源数据&#xff1a;htt…

Java特性之设计模式【装饰器模式】

一、装饰器模式 概述 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中&#xff0c;以…

C语言牛客网刷题

1.最大公约数和最小公倍数的组合问题 &#xff08;1&#xff09;在调试的过程中涉及到很大的数据&#xff0c;我们我们在定义变量的时候定义为long long类型 &#xff08;2&#xff09;这个里面我们自定义了max2用来求最大公约数&#xff0c;min2用来求最小公倍数 &#xff0…

MYSQL报 - Lock wait timeout exceeded; try restarting transaction

前言 今天在使用数据库编辑数据时&#xff0c;页面突然卡主&#xff0c;退出程序后重新编辑&#xff0c;发现报错&#xff0c;1205 - Lock wait timeout exceeded&#xff1b; try restarting transaction&#xff08;如下图&#xff09;&#xff0c;正巧在和同事开会&#xf…

大屏页面 电子数字 制作

字体包下载地址 链接: https://pan.baidu.com/s/1pjslpT5QQi7-oALDM-uX8g 提取码: zxcv 效果展示 使用前使用后 使用方式 1.解压后将文件夹放入public 2.在公用样式中加入 font-face {font-family: mFont;src: url(../../public/DS-Digital/DS-DIGI-1.ttf); } 3. 在项目…

技术总结: 基于http3的动态网页图片爬虫设计

目录 写在前面第一步: 打开网页第二步: 学会模拟浏览器发送请求第三步: 分析网页结果, 找到爬取内容第四步: 处理动态网页 所有程序 写在前面 作为一名算法工程师, 收集处理数据的能力也是比较重要的. 能够充分利用好互联网的数据资源, 加上优秀的算法能力, 就如虎添翼. 这次就…

关于在CentOS中卸载MySQL

想要卸载MySQL当然要知道自己的MySQL是用那种方法来安装的了&#xff0c;一般来说MySQL的安装方法在市面上有三种 编译安装、YUM安装、RPM安装&#xff0c;下面会介绍到后两种安装的卸载方法 首先查看是否安装MySQL&#xff0c;一般可以看到版本信息就证明安装了 mysql -V 卸载…

【DL经典回顾】激活函数大汇总(四十二)(CosReLU附代码和详细公式)

激活函数大汇总(四十二)(CosReLU附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的角色,它们决定着神经元的输出,并且影响着网络的学习能…

【热门话题】深入浅出:npm常用命令详解与实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 标题&#xff1a;深入浅出&#xff1a;npm常用命令详解与实践引言一、npm基本概…

Kubernetes的Namespace使用

在 Kubernetes 中&#xff0c;命名空间提供了一种用于隔离单个集群中的资源组的机制。资源名称在命名空间内必须是唯一的&#xff0c;但不能跨命名空间。基于命名空间的作用域仅适用于命名空间物体 &#xff08;例如部署、服务等&#xff09;而不是集群范围的对象&#xff08;例…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.4 会计凭证处理

2.4.1 会计凭证处理的基本概念 会计凭证是企业经济业务在会计上的反映&#xff0c;它是用会计语言表达的一种单据。 典型生产企业的财务凭证创建方式&#xff1a; 企业在实施SAP的过程中&#xff0c;大部分凭证都是自动生成的。要保证这些凭证能准确地生成&#xff0c;必须要满…

全流程解析:R语言在Meta分析中的核心技术应用

R语言作为一种强大的统计分析和绘图语言&#xff0c;在科研领域发挥着日益重要的作用。其中&#xff0c;Meta分析作为一种整合多个独立研究结果的统计方法&#xff0c;在R语言中得到了广泛的应用。通过R语言进行Meta分析&#xff0c;研究者能够更为准确、全面地评估某一研究问题…

掌握Python数据分析:从入门到精通【文末送书-43】

文章目录 掌握Python数据分析&#xff1a;从入门到精通入门篇进阶篇精通篇 Python数据分析从入门到精通&#xff08;第2版&#xff09;&#xff08;软件开发视频大讲堂&#xff09;【文末送书-43】 掌握Python数据分析&#xff1a;从入门到精通 Python已成为数据科学领域最受欢…

网工内推 | 云计算工程师,HCIE认证优先,最高18k*14薪

01 杭州中港科技有限公司 招聘岗位&#xff1a;云计算工程师 职责描述&#xff1a; 1、承担云计算相关工程交付、业务上云及售前测试&#xff0c;从事虚拟化、桌面云、存储、服务器、数据中心、大数据、相关产品的工程项目交付或协助项目交付。 2、承担云计算维护工程师职责&…