体验AI代码生成 原创
def hanoi(n, source, auxiliary, target): “”" 递归实现汉诺塔移动逻辑 :param n: 当前需要移动的圆盘数量 :param source: 起始柱子(如 ‘A’) :param auxiliary: 辅助柱子(如 ‘B’) :param target: 目标柱子(如 ‘C’) “”" if n == 1: # 递归终止条件:只有1个圆盘时,直接从起始柱移到目标柱 print(f"移动圆盘1从柱子{source}到柱子{target}“) return # 第一步:把n-1个圆盘从source借助target移到auxiliary hanoi(n-1, source, target, auxiliary) # 第二步:把第n个圆盘从source移到target print(f"移动圆盘{n}从柱子{source}到柱子{target}”) # 第三步:把n-1个圆盘从auxiliary借助source移到target hanoi(n-1, auxiliary, source, target) # 获取用户输入的圆盘数量 while True: try: n = int(input(“请输入圆盘数量(1≤n≤10):”)) if 1 <= n <= 10: break else: print(“输入错误!请输入1到10之间的正整数。”) except ValueError: print(“输入错误!请输入有效的正整数。”) # 调用汉诺塔函数,起始柱A,辅助柱B,目标柱C hanoi(n, ‘A’, ‘B’, ‘C’)
from collections import deque def min_time_to_catch_cow(N, K): # 处理特殊情况:农夫已经在牛的位置 if N >= K: return N - K # 初始化:最大位置限制(防止越界,100000足够覆盖题目范围) max_pos = 100000 # 记录每个位置是否被访问过,以及到达该位置的步数 visited = [-1] * (max_pos + 2) # +2 防止×2时越界 queue = deque() # 起始点入队 queue.append(N) visited[N] = 0 # BFS核心逻辑 while queue: current = queue.popleft() # 遍历三种移动方式 for next_pos in [current - 1, current + 1, current * 2]: # 检查边界和是否已访问 if 0 <= next_pos <= max_pos and visited[next_pos] == -1: visited[next_pos] = visited[current] + 1 # 找到目标,直接返回 if next_pos == K: return visited[next_pos] queue.append(next_pos) # 理论上不会走到这里(题目保证有解) return -1 # 输入处理 if name == “main”: # 读取输入的两个整数N和K N, K = map(int, input().split()) # 计算并输出最短时间 print(min_time_to_catch_cow(N, K)) def max_pyramid_sum(): # 读取行数R R = int(input()) # 存储数字金字塔 pyramid = [] for _ in range®: # 读取每行的数字并转为整数列表 row = list(map(int, input().split())) pyramid.append(row) # 初始化DP数组,直接复用金字塔数组(节省空间) dp = [row.copy() for row in pyramid] # 从倒数第二行开始向上递推 for i in range(R-2, -1, -1): # 第i行有i+1个元素 for j in range(i+1): # 状态转移:当前值 + 下一行左右两个位置的最大值 dp[i][j] = pyramid[i][j] + max(dp[i+1][j], dp[i+1][j+1]) # 顶部位置的结果就是最大和 return dp[0][0] # 输出结果 print(max_pyramid_sum())
更多推荐
所有评论(0)