首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-03 04:43
  • 3882
  • 12479
blog.csdn.net

目录

1、移动石子:

1-1、Python:

1-2、VBA:

2、相关文章:

Python算法之旅:http://iyenn.com/rec/1699032.html?spm=1001.2014.3001.5502

个人主页:非风V非雨-CSDN博客

欢迎志同道合者一起交流学习,我的QQ:94509325/微信

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

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

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

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

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

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

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

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

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

2、相关文章:

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

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

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

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

Python算法之旅:http://iyenn.com/rec/1699032.html?spm=1001.2014.3001.5502
个人主页:非风V非雨-CSDN博客
欢迎志同道合者一起交流学习,我的QQ:94509325/微信:

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览60120 人正在系统学习中
遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://myelsa1024.blog.csdn.net/article/details/136966830"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top