当前位置: 首页 > news >正文

数学建模小练习

题目B

电影《虎胆龙威 3》中,塞谬尔和布鲁斯扮演的主角要拆除西蒙所放的炸弹。西蒙喷泉上面有两个壶,容量分别是5加仑和3加仑,向其中一个壶中加入刚好 4 加仑的水,计时器会停止,否则5分钟后会爆炸。 问题:能够安全拆弹吗?要怎么做?

解:每个状态可以表示为一个元组 (x, y),其中 x 是 5 加仑壶中的水量,y 是 3 加仑壶中的水量。初始状态为 (0, 0),即两个壶都是空的。目标状态是 x = 4,即 5 加仑壶中有 4 加仑水。

可以执行以下几种操作:

填满5加仑壶(x, y) -> (5, y)

填满 3 加仑壶(x, y) -> (x, 3)

倒空 5 加仑壶(x, y) -> (0, y)

倒空 3 加仑壶(x, y) -> (x, 0)

从 5 加仑壶倒水到 3 加仑壶:倒水,直到一个壶空或者另一个壶满。

从 3 加仑壶倒水到 5 加仑壶:同样的,直到一个壶空或者另一个壶满。

BFS搜索方案

from collections import deque
​
# 定义 BFS 函数,返回完整的操作过程
def water_jug_bfs():# 初始状态,两个壶都是空的 (0, 0)initial_state = (0, 0)# 队列用于 BFS,每个元素不仅记录状态,还记录从初始状态到达该状态的路径queue = deque([(initial_state, [])])  # 队列中存放 (状态, 操作路径)# 用于记录已经访问过的状态,防止重复搜索visited = set([initial_state])# 定义壶的容量jug1_capacity = 5jug2_capacity = 3goal = 4  # 我们的目标是 5 加仑壶中正好有 4 加仑水# BFS 搜索过程while queue:current_state, path = queue.popleft()x, y = current_state# 如果达到了目标状态 (5加仑壶中有4加仑水),则返回成功和完整的操作路径if x == goal:return True, path + [(current_state, "最终状态")]# 产生所有可能的下一步状态,并附加上相应的操作说明next_states = [((jug1_capacity, y), "填满 5 加仑壶"),  # 填满5加仑壶((x, jug2_capacity), "填满 3 加仑壶"),  # 填满3加仑壶((0, y), "倒空 5 加仑壶"),              # 倒空5加仑壶((x, 0), "倒空 3 加仑壶"),              # 倒空3加仑壶# 从 5 加仑壶倒水到 3 加仑壶,倒的水量是 min(x, jug2_capacity - y)((x - min(x, jug2_capacity - y), y + min(x, jug2_capacity - y)), f"从 5 加仑壶倒 {min(x, jug2_capacity - y)} 加仑水到 3 加仑壶"),  # 从 3 加仑壶倒水到 5 加仑壶,倒的水量是 min(y, jug1_capacity - x)((x + min(y, jug1_capacity - x), y - min(y, jug1_capacity - x)), f"从 3 加仑壶倒 {min(y, jug1_capacity - x)} 加仑水到 5 加仑壶")]# 对每个可能的下一状态进行处理for next_state, action in next_states:if next_state not in visited:  # 如果没有访问过这个状态visited.add(next_state)    # 标记为访问queue.append((next_state, path + [(current_state, action)]))  # 加入到搜索队列中,并记录路径return False, []  # 如果找不到解,则返回 False 和空路径
​
# 运行 BFS
result, path = water_jug_bfs()
if result:print("可以安全拆除炸弹。操作步骤如下:")for i in range(len(path) - 1):state, action = path[i]print(f"当前状态 (5加仑壶: {state[0]} 加仑, 3加仑壶: {state[1]} 加仑) -> {action}")
else:print("无法安全拆除炸弹")
结果:
可以安全拆除炸弹。操作步骤如下:
当前状态 (5加仑壶: 0 加仑, 3加仑壶: 0 加仑) -> 填满 5 加仑壶
当前状态 (5加仑壶: 5 加仑, 3加仑壶: 0 加仑) -> 从 5 加仑壶倒 3 加仑水到 3 加仑壶
当前状态 (5加仑壶: 2 加仑, 3加仑壶: 3 加仑) -> 倒空 3 加仑壶
当前状态 (5加仑壶: 2 加仑, 3加仑壶: 0 加仑) -> 从 5 加仑壶倒 2 加仑水到 3 加仑壶
当前状态 (5加仑壶: 0 加仑, 3加仑壶: 2 加仑) -> 填满 5 加仑壶
当前状态 (5加仑壶: 5 加仑, 3加仑壶: 2 加仑) -> 从 5 加仑壶倒 1 加仑水到 3 加仑壶

故可以安全拆除炸弹,首先填满5加仑壶,然后将其中的3加仑倒入3加仑壶。接着倒空3加仑壶,并将5加仑壶剩下的2加仑倒入3加仑壶。随后再次填满5加仑壶,并将其中的1加仑倒入3加仑壶。这时,5加仑壶中剩下的正好是4加仑水,从而成功拆除炸弹。

相关文章:

数学建模小练习

题目B 电影《虎胆龙威 3》中,塞谬尔和布鲁斯扮演的主角要拆除西蒙所放的炸弹。西蒙喷泉上面有两个壶,容量分别是5加仑和3加仑,向其中一个壶中加入刚好 4 加仑的水,计时器会停止,否则5分钟后会爆炸。 问题:能够安全拆弹…...

Java爬虫:获取SKU详细信息的艺术

在电子商务的世界里,SKU(Stock Keeping Unit,库存单位)是每个商品的唯一标识符,它包含了商品的详细信息,如尺寸、颜色、价格等。对于商家和开发者来说,获取商品的SKU详细信息对于库存管理、订单…...

心理咨询展示网站建设渠道拓展

心理问题长期以来都受到关注,每个城市里也都有相关服务商家,除了进店外,线上也可以开展咨询服务,对需求者来说需要找到靠谱的品牌,而商家也需要触达到更多客户获取转化。 网站是品牌线上工具,利于商家通过…...

naocs注册中心,配置管理,openfeign在idea中实现模块间的调用,getway的使用

一 naocs注册中心步骤 1 nacos下载安装 解压安装包,直接运行bin目录下的startup.cmd 这里双击运行出现问题的情况下 (版本低的naocs) 在bin目录下 打开cmd 运行以下命令 startup.cmd -m standalone 访问地址: http://localh…...

先进封装技术 Part02---TSV科普

一、引言 随着电子设备向更小型化、更高性能的方向发展,传统的芯片互连技术已经无法满足日益增长的需求。在这样的背景下,TSV(Through-Silicon Via,硅通孔)技术应运而生,成为先进封装技术中的核心之一。 如果我们看大多数主板,可以看到两件事:第一,芯片之间的大多数连…...

【数据挖掘】2023年 Quiz 1-3 整理 带答案

目录 Quiz 1Quiz 2Quiz 3Quiz 1 Problem 1(30%). Consider the training data shown below. Here, A , B A, B A,B, and...

老古董Lisp实用主义入门教程(12):白日梦先生的白日梦

白日梦先生的白日梦 白日梦先生已经跟着大家一起学Lisp长达两个月零五天! 001 粗鲁先生Lisp再出发002 懒惰先生的Lisp开发流程003 颠倒先生的数学表达式004 完美先生的完美Lisp005 好奇先生用Lisp来探索Lisp006 好奇先生在Lisp的花园里挖呀挖呀挖007 挑剔先生给出…...

UE5 Windows热更新解决方案思路(HotPatcher+Tomcat+RuntimeFilesDownloader)

以下个人学习笔记。其中必会存在一些问题,仅作参考。本人版本5.1。 参考视频: UE4热更新:HotPatcher插件使用教程_哔哩哔哩_bilibili 3.检查需要下载的版本_哔哩哔哩_bilibili 参考文章: UE 热更新:Questions &…...

进程管理工具:非daemon进程管理工具supervisor

一、非daemon进程管理工具:supervisor Windows安装supervisor https://pypi.org/project/supervisor-win/4.5.0/#files 一)进程管理supervisor简介 supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程&…...

c++模拟真人鼠标轨迹算法

一.鼠标轨迹算法简介 鼠标轨迹底层实现采用 C / C语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼…...

android12/13/14版本wms最新面试题:dumpsys window和sf一定会一致么?

背景: 近期学员们学习了马哥wms课程后,去参加相关的大厂的framework面试,有一个学员朋友带回来了一个wms相关的面试题,具体面试题描述如下: 问题1 请问wms的window和SurfaceFlinger的Layer有什么关系? 回…...

Python脚本示例,你可以使用这个脚本来自动化登录网站、选择页面元素和提交表单

devtools 元素页面可以选择元素,copy xpath用于查找 python编程:1、浏览器登录https://58.xxx/ 账号:xxx 密码:FN123456 2、选择“技能训练” 3、选择“云网智能运维员培训相关资料” 4、选择“L1-Linux操作系统与运维题库” 5、依次选择1-50题目&#x…...

安卓13设置动态修改设置显示版本号 版本号增加信息显示 android13增加序列号

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 设置 =》关于平板电脑 =》版本号 在这里显示了系统的一些信息,但是这里面的信息并不包含序列号之类的信息,我们修改下系统设置,在这里增加上相关的序列号。 2.问题分析…...

从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据

从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据 目录 从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据一、修改参数文件的内容二、…...

相互作用感知的 3D 分子生成 VAE 模型 - DeepICL 评测

DeepICL 是一个基于相互作用感知的 3D 分子生成模型,能够在目标结合口袋内进行相互作用引导的小分子设计。DeepICL 通过利用蛋白质-配体相互作用的普遍模式作为先验知识,在有限的实验数据下也能实现高度的泛化能力。 一、背景介绍 DeepICL 来源于韩国科学…...

Java实现随机抽奖的方法有哪些

在Java中实现随机抽奖的方法,通常我们会使用java.util.Random类来生成随机数,然后基于这些随机数来选择中奖者。以下将给出几种常见的随机抽奖实现方式,包括从数组中抽取、从列表中抽取以及基于权重的抽奖方式。 1. 从数组中抽取 import ja…...

grafana加载缓慢解决方案

背景 目前随着数据和图表的逐渐增多,Grafana 页面加载速度明显变慢,严重影响了用户体验,几次都有骂娘的冲动.,因此我们需要对 Grafana 进行优化,以提升加载性能。 对于速度优化,我们可以从以下方面进行入…...

【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构

一、html5 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><script type"text/javascript" src"http://51.onelink.ynwlzc.net/o2o/tpl/Merchant/static/js…...

多路复用和事件轮询机制

多路复用&#xff1a;Nio 服务端只有一个线程处理多个连接 事件轮询机制&#xff1a;select 底层用了 epoll。 select open 调用了 epoll 通过3个方法来实现事件轮询 1.epoll.create 创建epoll 多个集合 2.epoll.ctl 如果有事件会把事件挪到就绪事件列表。 3.epoll.wait 会监听…...

Android常用C++特性之std::abs

声明&#xff1a;本文内容生成自ChatGPT&#xff0c;目的是为方便大家了解学习作为引用到作者的其他文章中。 std::abs 是 C 标准库中的一个函数&#xff0c;用于计算整数、浮点数或其他数值类型的绝对值。它返回一个值&#xff0c;该值是参数的非负数形式&#xff0c;即去掉负…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...