1.def hanoi(n, start, helper, target): """ 递归实现汉诺塔移动逻辑 :param n: 剩余需要移动的圆盘数量 :param start: 起始柱子(A/B/C) :param helper: 辅助柱子(A/B/C) :param target: 目标柱子(A/B/C) """ if n == 1: # 终止条件:只剩1个圆盘,直接移动到目标柱 print(f"移动圆盘1从柱子{start}到柱子{target}") return # 步骤1:把n-1个圆盘从start借助target移到helper hanoi(n-1, start, target, helper) # 步骤2:把第n个圆盘从start移到target print(f"移动圆盘{n}从柱子{start}到柱子{target}") # 步骤3:把n-1个圆盘从helper借助start移到target hanoi(n-1, helper, start, target) # 获取用户输入 n = int(input("请输入圆盘数量n:").replace("n=", "").strip()) # 兼容输入格式:n=3 或直接输入3 # 调用递归函数,起始柱A,辅助柱B,目标柱C hanoi(n, 'A', 'B', 'C')
2.from collections import deque def min_time_catch_cow(N, K): # 边界情况:农夫已经在牛的位置 if N >= K: return N - K # 初始化:访问标记数组(最大位置设为2*K,避免越界且覆盖所有可能路径) max_pos = 2 * K visited = [False] * (max_pos + 1) # 队列存储 (当前位置, 已花费时间) queue = deque() queue.append((N, 0)) visited[N] = True while queue: pos, time = queue.popleft() # 遍历三种移动方式 # 方式1:X+1 next1 = pos + 1 if next1 == K: return time + 1 if next1 <= max_pos and not visited[next1]: visited[next1] = True queue.append((next1, time + 1)) # 方式2:X-1 next2 = pos - 1 if next2 == K: return time + 1 if next2 >= 0 and not visited[next2]: visited[next2] = True queue.append((next2, time + 1)) # 方式3:2*X next3 = pos * 2 if next3 == K: return time + 1 if next3 <= max_pos and not visited[next3]: visited[next3] = True queue.append((next3, time + 1)) # 输入处理 N, K = map(int, input().split()) # 输出结果 print(min_time_catch_cow(N, K))
3.def max_path_sum(): # 读取行数 R = int(input()) # 存储数字金字塔(二维列表) pyramid = [] for _ in range(R): row = list(map(int, input().split())) pyramid.append(row) # 从倒数第二行开始向上动态规划 for i in range(R-2, -1, -1): # 遍历当前行的每个元素 for j in range(len(pyramid[i])): # 当前元素 = 当前值 + 下一行相邻两个值的最大值 pyramid[i][j] += max(pyramid[i+1][j], pyramid[i+1][j+1]) # 顶层元素即为最大路径和 return pyramid[0][0] # 输出结果 print(max_path_sum())