news 2026/6/10 22:18:36

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

作者头像

张小明

前端开发工程师

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/6/10 14:53:52

光的折射模拟器(斯涅尔定律演示)

<!DOCTYPE html><html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>光的折射模拟器</title><style>bo…

作者头像 李华
网站建设 2026/6/10 16:13:44

Java毕设项目:基于springboot的学院失物招领平台的设计与实现(源码+文档,讲解、调试运行,定制等)

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

作者头像 李华
网站建设 2026/6/10 17:18:38

Requestium - 将Requests和Selenium合并在一起的自动化测试工具

Requests 是 Python 的第三方库&#xff0c;主要用于发送 http 请求&#xff0c;常用于接口自动化测试等。 Selenium 是一个用于 Web 应用程序的自动化测试工具。Selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 本篇介绍一款将 Requests 和 Seleniu…

作者头像 李华
网站建设 2026/6/10 2:16:08

AI 助力编程:三大算法题的代码生成与测试全流程记录

问题 1&#xff1a;汉诺塔python运行def hanoi(n, start, helper, target):if n 1:print(f"移动圆盘1从柱子{start}到柱子{target}")returnhanoi(n-1, start, target, helper)print(f"移动圆盘{n}从柱子{start}到柱子{target}")hanoi(n-1, helper, start,…

作者头像 李华
网站建设 2026/6/10 20:30:35

【课程设计/毕业设计】基于java的个人健康管理系统的设计与实现健康建议和健康管理建议【附源码、数据库、万字文档】

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

作者头像 李华