Python-VBA编程500例-016(入门级)

移动石子算法(Stone-moving Algorithm)是一类在计算机科学和数学中广泛研究的算法问题,通常涉及在特定规则下移动石子以达到某种目标。虽然这些问题本身可能看起来是抽象的,但它们在实际应用中有多种体现,包括但不限于以下领域:

1、游戏和娱乐:移动石子算法是许多经典游戏(如Nim游戏、汉诺塔等)的核心机制。这些游戏不仅为人们提供了娱乐,还促进了算法和策略思维的发展。此外,在现代电子游戏中,移动石子算法也可以用于设计具有挑战性的谜题或关卡。

2、路径规划:在机器人路径规划问题中,移动石子算法可以被用来寻找从起点到终点的最优路径,同时避开障碍物。例如,在自动化仓库或物流系统中,移动石子算法可以用于优化货物的存储和取货顺序,提高运营效率。

3、人工智能和机器学习:移动石子算法也可以用于训练人工智能模型,特别是在解决具有空间约束和规则限制的问题时。通过让模型学习如何有效地移动石子以达到目标,可以训练出具有强大决策能力的智能系统。

4、排程:移动石子算法可以用來解决排程问题,例如,在制造中排程生产计划或在零售业中排程员工班次,算法可以帮助最大化效率和生产力,同时考虑多种限制,例如,时间、容量和优先级等。

5、算法设计和优化:研究移动石子算法有助于深入理解组合游戏和博弈论的基本原理,从而推动算法设计和优化领域的发展。通过对这类问题的深入研究,研究人员可以发现新的算法思想和技术,并将其应用于更广泛的问题中,如搜索问题、决策问题以及资源分配问题等。

总之,移动石子算法在实际应用中的体现是多种多样的,它们不仅在游戏和娱乐领域发挥作用,还在机器人、自动化、计算机科学、数学等多个领域找到用武之地。基于移动石子算法的原理和思想,可以解决许多涉及移动、交换、优化和规划等问题的实际挑战。

1、移动石子:
1-1、Python:
# 1.问题描述:
# 在x轴上分布着k个石子,用arr1数组表示它们的位置.现需要把这些石子进行移动,按1,3,5,7,9,......,2k-1或2,4,6,8,10,......,2k进行有规律的排列,
# 每次只能移动1个石子,且只能把石子往左或往右移动1个单位,返回最少的移动次数.注意,同一个位置不能出现两个石子,且移动后相邻两个石子的间隔相同.
# 2.问题示例:
# 输入数组arr1 = [3, 5, 6, 8, 10, 11, 24],只需要:3→2,5→4,11→12,24→23→22→21→20→19→18→17→16→15→14共13步操作即可,因此输出13.
# 3.代码实现:
class Solution:# 参数arr1: 一个列表# 返回值: 整数,即最少移动次数def stone_moving(self, arr1):# 使用sort方法原地排序,避免生成新的列表arr1.sort()# 初始化奇数/偶数索引位置的总移动次数even_sum = 0odd_sum = 0# 遍历排序后的列表for i in range(0, len(arr1)):# 计算当前石子到奇数/偶数索引位的距离,分别进行累加处理odd_sum += abs(arr1[i] - (2 * i + 1))even_sum += abs(arr1[i] - (2 * i + 2))# 返回奇数索引位置和偶数索引位置中移动次数较小的值return even_sum if odd_sum > even_sum else odd_sum
# 主函数
if __name__ == '__main__':# 测试数组arr1 = [3, 5, 6, 8, 10, 11, 24]# 创建Solution对象solution = Solution()# 打印原始数组print("数组:", arr1)# 计算并打印最少移动次数print("最少移动次数:", solution.stone_moving(arr1))
# 4.运行结果:
# 数组: [3, 5, 6, 8, 10, 11, 24]
# 最少移动次数: 13
1-2、VBA:
Rem 自定义函数,功能:移动石子
Function stone_moving(arr1 As Variant) As Integer'定义变量Dim i As IntegerDim j As IntegerDim temp As VariantDim even_sum As IntegerDim odd_sum As Integer' 使用冒泡排序算法对数组进行排序For i = LBound(arr1) To UBound(arr1) - 1For j = LBound(arr1) To UBound(arr1) - i - 1If arr1(j) > arr1(j + 1) Thentemp = arr1(j)arr1(j) = arr1(j + 1)arr1(j + 1) = tempEnd IfNext jNext i' 遍历排序后的数组For i = LBound(arr1) To UBound(arr1)' 计算当前石子到奇数索引位的距离(注意,VBA中数组索引从1开始)odd_sum = odd_sum + Abs(arr1(i) - (2 * (i - LBound(arr1)) + 1))' 计算当前石子到偶数索引位的距离even_sum = even_sum + Abs(arr1(i) - (2 * (i - LBound(arr1)) + 2))Next i' 返回奇数索引位置和偶数索引位置中移动次数较小的值stone_moving = IIf(odd_sum > even_sum, even_sum, odd_sum)
End Function
Rem 执行过程,功能:调用自定义函数stone_moving,在立即窗口中输出结果
Sub TestRun()' 定义变量Dim arr1() As VariantDim minMoves As Integer' 初始化数组arr1 = Array(3, 5, 6, 8, 10, 11, 24)' 调用自定义函数,返回移动最少步数minMoves = stone_moving(arr1)'输出结果Debug.Print "测试数组:" & Join(arr1, ",")Debug.Print "最少移动次数:" & minMoves
End Sub
'结果输出:
'测试数组:3,5,6,8,10,11,24
'最少移动次数:13

注意:1-2中的代码需粘贴到你的VBA编辑器中,按F5执行TestRun程序,在立即窗口中输出结果。

2、相关文章:

2-1、Python-VBA编程500例-014-02(入门级)

2-2、Python-VBA编程500例-015-01(入门级)

2-3、Python-VBA编程500例-015-02(入门级)

2-4、Python-VBA编程500例-015-03(入门级)

Myelsa的Python算法之旅(高铁直达):https://myelsa1024.blog.csdn.net/article/details/136889623?spm=1001.2014.3001.5502
欢迎访问个人主页:非风V非雨-CSDN博客
欢迎志同道合者一起交流学习,我的QQ:94509325/微信:

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

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

相关文章

stable diffusion 提示词进阶语法-年龄身材肤色-学习小结

stable diffusion 提示词进阶语法-年龄&身材&肤色 前言年龄提示词青年(18-25岁)幼年、少年(1-18)中年(35-60岁)老年(65-80岁 老爷爷 老奶奶) 身材提示词肤色关键词(人物基础…

【现代C++】nullptr用法

在C11之前,NULL被用来表示空指针,但它只是一个宏,定义为0或((void*)0),这在某些情况下可能会导致类型混淆和错误。为了解决这些问题,C11引入了nullptr关键字,它是一种特殊的空指针字面量,具有自…

一次完整的 HTTP 请求所经历的步骤

1: DNS 解析(通过访问的域名找出其 IP 地址,递归搜索)。 2: HTTP 请求,当输入一个请求时,建立一个 Socket 连接发起 TCP的 3 次握手。如果是 HTTPS 请求,会略微有不同。 3: 客户端向服务器发…

一文详解Rust中的字符串

有人可能会说,字符串这么简单还用介绍?但是很多人学习rust受到的第一个暴击就来自这浓眉大眼、看似毫无难度的字符串。 请看下面的例子。 fn main() {let my_name "World!";greet(my_name); }fn greet(name: String) {println!("Hello…

【Mysql数据库基础03】分组函数(聚合函数)、分组查询

分组函数(聚合函数)、分组查询 0 该博客所要用的数据库表的属性1 分组函数1.1 简单的使用1.2 是否忽略null值1.3 和关键字搭配使用1.4 count函数的详细介绍1.5 练习 2 分组查询Group by2.1 简单的分组查询2.2 练习 3 格式投票:yum: 0 该博客所要用的数据库表的属性 …

基于SpringBoot+Redis实现接口限流

前言 业务中需要对一些接口进行限流处理&#xff0c;防止机器人调用或者保证服务质量&#xff1b; 实现方式 基于redis的lua脚本 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis&…

javaWeb点餐平台系统功能介绍说明

开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 项目关键技术 1、JSP技术 JSP(Java…

pytest简介以及命令行执行

pytest简介以及安装 pytest简介导入第三方库修改工具类 pytest命令方式执行函数执行pytest中的参数详解 pytest简介 pytest有很多强大的插件 pytest-html &#xff08;生成html格式的自动化测试报告&#xff09; pytest-xdist &#xff08;测试用例分布式执行&#xff0c;多cpu…

鸿蒙Harmony应用开发—ArkTS-@Provide装饰器和@Consume装饰器:与后代组件双向同步

Provide和Consume&#xff0c;应用于与后代组件的双向数据同步&#xff0c;应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递&#xff0c;Provide和Consume摆脱参数传递机制的束缚&#xff0c;实现跨层级传递。 其中Provide装饰的变…

目标检测——PP-YOLO算法解读

PP-YOLO系列&#xff0c;均是基于百度自研PaddlePaddle深度学习框架发布的算法&#xff0c;2020年基于YOLOv3改进发布PP-YOLO&#xff0c;2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet&#xff0c;2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列&#xff0c;所以放一起解…

重学SpringBoot3-MyBatis的三种分页方式

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-MyBatis的三种分页方式 准备工作环境搭建数据准备未分页效果 1. 使用MyBatis自带的RowBounds进行分页演示 2. 使用物理分页插件演示 3. 手动编写分页SQL…

浅浅迈入C++门槛

从今天起&#xff0c;我要开始hello&#xff0c;world。 往后更要做到&#xff0c;拳打数据结构&#xff0c;脚踢Linux。 这就是江湖人的风范。 拼搏百天&#xff0c;我要学希普拉斯普拉斯。 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许…

小红书扫码登录分析与python实现

文章目录 1. 写在前面2. 接口分析3. 代码实现 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

设计模式深度解析:适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼 探索设计模式的魅力&#xff1a;深入了…

设计模式 适配器模式

1.背景 适配器模式&#xff0c;这个模式也很简单&#xff0c;你笔记本上的那个拖在外面的黑盒子就是个适配器&#xff0c;一般你在中国能用&#xff0c;在日本也能用&#xff0c;虽然两个国家的的电源电压不同&#xff0c;中国是 220V&#xff0c;日本是 110V&#xff0c;但是这…

linux内核input子系统概述

目录 一、input子系统二、关键数据结构和api2.1 数据结构2.1.1 input_dev2.1.2 input_handler2.1.3 input_event2.1.4 input_handle 2.2 api接口2.2.1 input_device 相关接口input_device 注册流程事件上报 2.2.2 input handle 相关接口注册 handle指定 handle 2.2.3 input han…

内网横向移动小结

windows Windows-Mimikatz 适用环境&#xff1a; 微软为了防止明文密码泄露发布了补丁 KB2871997&#xff0c;关闭了 Wdigest 功能。当系统为 win10 或 2012R2 以上时&#xff0c;默认在内存缓存中禁止保存明文密码&#xff0c;此时可以通过修改注册表的方式抓取明文&#xff…

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第八:trans_func class

# 生态学研究人员通常对微生物群落的功能特征感兴趣&#xff0c;因为功能或代谢数据对于解释微生物群落的结构和动态以及推断其潜在机制是强有力的。 # 由于宏基因组测序复杂且昂贵&#xff0c;利用扩增子测序数据预测功能谱是一个很好的选择。 # 有几个软件经常用于此目标&…

Ambari——编译——替换国内镜像源出现certificate has expired 问题

您的支持是我继续创作与分享的动力源泉!!! 您的支持是我继续创作与分享的动力源泉!!! 您的支持是我继续创作与分享的动力源泉!!! 报错原因: 错误分析: 1、国内镜像源已经调整为: https://registry.npmmirror.com 非先前 https://registry.npm.taobao.org2、npm设置ssl…

[ESP32]:基于HTTP实现百度AI识图

[ESP32]&#xff1a;基于HTTP实现百度AI识图 测试环境&#xff1a; esp32-s3esp idf 5.1 首先&#xff0c;先配置sdk&#xff0c;可以写入到sdkconfig.defaults CONFIG_IDF_TARGET"esp32s3" CONFIG_IDF_TARGET_ESP32S3yCONFIG_PARTITION_TABLE_CUSTOMy CONFIG_PA…