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

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

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}")
http://www.rkmt.cn/news/153623.html

相关文章:

  • 超强Python/C++界面类生成工具CodeGenor之项目结构生成
  • 口碑佳且可个性化定制的丁基胶带供应商推荐
  • AI 助力编程:三大算法题的代码生成与测试全流程记录
  • fiddler的一些使用步骤
  • 口碑好的电池厂家,储能电池与批量定制之选
  • 禅道中部门项目经理将已评审的需求拆解为具体任务,分配给对应成员的具体操作
  • 四维轻云——让每一处空间都数据可视,让每一份资产都价值可期
  • 【课程设计/毕业设计】基于Sprinboot的失物招领系统设计与实现基于springboot的学院失物招领平台的设计与实现【附源码、数据库、万字文档】
  • HTTP协议核心知识点整理(附经典练习题)
  • 抢占校园流量入口!一套校园服务论坛系统源码=服务号+小程序+App,三端齐发!
  • 2025冷库厂家综合实力排名TOP5:从产能到服务的全方位对比 - 爱采购寻源宝典
  • 【课程设计/毕业设计】基于java的个人健康管理系统的设计与实现健康建议和健康管理建议【附源码、数据库、万字文档】
  • 科研常用工具
  • 2025涂塑钢管厂家推荐排行榜:从产能到质量全方位对比 - 爱采购寻源宝典
  • 奶奶辈微信昵称天花板[特殊字符],亲切又洋气!
  • 昇思MindSpore引领AI框架迈入“超节点时代”
  • 迈向自主可控:微型磁力齿轮泵进口替代趋势与优质厂家推荐 - 品牌2025
  • 计算机Java毕设实战-基于springboot的图书管理系统基于springboot的智慧图书管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 【毕业设计】基于java的个人健康管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 工商注册服务哪家强?德宣知财税脱颖而出
  • 书籍-龙树《中论》
  • 2025直埋保温管厂家推荐排行榜:产能与专利双维度权威对比 - 爱采购寻源宝典
  • 2025文化石厂家推荐排行榜:河北若艺产能领先,内丘博艺专利突出 - 爱采购寻源宝典
  • 跨域解决方案CORS
  • 墨问终端脚本发布独立版 2.1,支持多图片上传
  • 2025最新!10个降AI率工具测评,本科生必看
  • 解题报告-P3081 USACO13MAR Hill Walk G
  • 实用指南:量子计算入门:Python量子编程基础
  • [吾爱大神原创工具] Net Tools-网络运维工具箱
  • HTTP请求方法