news 2026/3/18 5:00:35

汉诺塔递归函数,农夫抓牛问题,数字金字塔最大路径和问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
汉诺塔递归函数,农夫抓牛问题,数字金字塔最大路径和问题
def hanoi(n, source, target, auxiliary): """ 汉诺塔递归函数 :param n: 当前要移动的圆盘数量 :param source: 起始柱子 :param target: 目标柱子 :param auxiliary: 辅助柱子 """ if n == 1: # 最小情况:直接将圆盘1从源移动到目标 print(f"移动圆盘1从柱子{source}到柱子{target}") else: # 步骤1:将上面n-1个圆盘从source -> auxiliary(借助target) hanoi(n - 1, source, auxiliary, target) # 步骤2:将第n个圆盘(最大的)从source -> target print(f"移动圆盘{n}从柱子{source}到柱子{target}") # 步骤3:将n-1个圆盘从auxiliary -> target(借助source) hanoi(n - 1, auxiliary, target, source) # 主程序 if __name__ == "__main__": try: n = int(input("请输入圆盘数量n(1≤n≤10):")) if not (1 <= n <= 10): print("n必须在1到10之间!") else: hanoi(n, 'A', 'C', 'B') except ValueError: print("请输入一个有效的整数!")

...........................................................................................................................................................

from collections import deque def min_time_to_catch_cow(N, K): """ 使用 BFS 求农夫抓牛的最短时间 农夫可以在数轴上通过三种方式移动:X-1, X+1, 2*X,每步耗时 1 分钟 目标是找到从 N 到 K 的最少时间(步数) :param N: 农夫起始位置 :param K: 牛的位置(目标) :return: 最少花费的时间(分钟) """ if N >= K: # 如果农夫在牛的右边或正好在牛的位置,只能一步步往左走 return abs(N - K) # BFS 初始化 queue = deque([(N, 0)]) # (位置, 时间) visited = set() visited.add(N) # 设定搜索范围,避免无限扩张 max_bound = 2 * K if K < 100000 else 100000 while queue: pos, time = queue.popleft() # 如果到达目标位置 if pos == K: return time # 生成下一步可能的位置:X-1, X+1, 2*X next_positions = [pos - 1, pos + 1, 2 * pos] for next_pos in next_positions: # 只处理有效且未访问过的位置 if 0 <= next_pos <= max_bound and next_pos not in visited: visited.add(next_pos) queue.append((next_pos, time + 1)) # 主程序 if __name__ == "__main__": try: # 增加清晰的用户提示 print("🐄 农夫抓牛问题") print("请输入农夫和牛的位置(两个整数,空格分隔):") print("说明:") print(" - 农夫起始位置 N (0 ≤ N ≤ 100000)") print(" - 牛的位置 K (0 ≤ K ≤ 100000)") print(" - 移动方式:X-1、X+1 或 2*X,每次耗时 1 分钟\n") N, K = map(int, input("请输入 N 和 K:").strip().split()) if not (0 <= N <= 100000) or not (0 <= K <= 100000): print("❌ 输入错误:N 和 K 必须在 0 到 100000 之间!") else: result = min_time_to_catch_cow(N, K) print(f"\n✅ 成功!农夫最少需要 {result} 分钟抓住牛。") except ValueError: print("❌ 输入格式错误!请确保输入两个有效的整数,例如:5 17") except Exception as e: print(f"⚠️ 程序发生未知错误:{e}")

.......................................................................................................................................................

def solve_pyramid(): print("📐 数字金字塔最大路径和问题") print("=" * 40) print("规则说明:") print("• 从顶部出发,每步可走向下一行的左下方或右下方") print("• 目标是找到一条路径,使得经过的数字之和最大") print("• 所有数字为非负整数且 ≤ 100\n") try: # 第一步:输入行数 while True: R_str = input("请输入金字塔的行数 R (1≤R≤1000):").strip() if not R_str: print("⚠️ 输入不能为空,请重新输入。") continue try: R = int(R_str) if 1 <= R <= 1000: break else: print("❌ R 必须在 1 到 1000 之间,请重新输入。") except ValueError: print("❌ 请输入一个有效的整数!") print(f"\n✅ 开始输入 {R} 行金字塔数据(第 i 行应有 i+1 个数字):") pyramid = [] for i in range(R): while True: row_input = input(f"第 {i + 1} 行 ({i + 1} 个数字): ").strip() if not row_input: print(" ⚠️ 这一行不能为空,请重新输入。") continue try: row = list(map(int, row_input.split())) if len(row) != i + 1: print(f" ❌ 错误:这一行需要 {i + 1} 个数字,但你输入了 {len(row)} 个。请重试。") continue # 检查每个数是否合法 valid = all(0 <= x <= 100 for x in row) if not valid: print(" ❌ 所有数字必须是非负且不超过 100,请重新输入。") continue pyramid.append(row) break except ValueError: print(" ❌ 包含无效字符,请只输入用空格分隔的整数!") # 动态规划求解(自底向上) # 创建 dp 表,最后一行初始化为原值 dp = [row[:] for row in pyramid] # 深拷贝 # 从倒数第二行开始向上更新 for i in range(R - 2, -1, -1): for j in range(i + 1): dp[i][j] += max(dp[i + 1][j], dp[i + 1][j + 1]) max_sum = dp[0][0] print("\n🎉 计算完成!") return max_sum except KeyboardInterrupt: print("\n\n👋 程序被用户中断。") exit(0) except Exception as e: print(f"\n❌ 程序发生未预期错误:{e}") return None # 主程序入口 if __name__ == "__main__": result = solve_pyramid() if result is not None: print(f"\n🏆 最大路径和为:{result}")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 6:31:21

springboot学生网上请假系统(11583)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/3/17 15:56:15

四维轻云——让每一处空间都数据可视,让每一份资产都价值可期

四维轻云平台通过三大核心能力的有机整合&#xff0c;为资产管理行业构建了真正的“数字空间智能中枢”&#xff1a;1.全要素数字化&#xff1a;将物理空间转化为可计算、可分析、可操作的数字资产&#xff1b;2.全流程可视化&#xff1a;从招商租赁到运维管理&#xff0c;所有…

作者头像 李华
网站建设 2026/3/15 10:35:29

2025年OpenTiny年度人气贡献者评选正式开始

前言 携手共创&#xff0c;致敬不凡&#xff01; 2025年&#xff0c;OpenTiny持续在前端开源领域扎根&#xff0c;每一位开发者都是推动项目共同前行的宝贵力量。从bug修复&#xff0c;到技术探讨&#xff1b;从参与开源活动&#xff0c;到输出技术文章&#xff1b;从使用项目…

作者头像 李华
网站建设 2026/3/13 16:38:07

手把手教你安装VS Code

1.搜索并打开官网&#xff1b;2.点击红框内的下载按钮&#xff1b;3.稍等一会就会自动下载&#xff0c;下载完成后打开文件&#xff1b;4.同意协议并下一步&#xff1b;5.强烈建议使用默认路径&#xff0c;直接点击下一步&#xff1b;6.下一步7.建议全部勾选&#xff0c;下一步…

作者头像 李华
网站建设 2026/3/13 12:38:57

计算机Java毕设实战-基于springboot的图书管理系统基于springboot的智慧图书管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华