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

Python考试999+编程题---实例+诡异版---持续更新中

第一题:背包问题(01背包)

题目:有 n 个物品和一个最多能承受重量为 w 的背包。第 i 个物品的重量是 weight [i],价值是 value [i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大

思路:

①定义 dp [j] 表示容量为 j 的背包能装的最大价值
②状态转移方程:dp [j] = max (dp [j], dp [j - weight [i]] + value [i])
③遍历顺序:先遍历物品,再倒序遍历背包容量(避免重复选取同一物品)

def knapsack_01(weight: list[int], value: list[int], w: int) -> int: n = len(weight) dp = [0] * (w + 1) for i in range(n): for j in range(w, weight[i] - 1, -1): dp[j] = max(dp[j], dp[j - weight[i]] + value[i]) return dp[w] # 测试 weight = [1, 3, 4] value = [15, 20, 30] w = 4 print(knapsack_01(weight, value, w)) # 输出: 35

第二题:完全背包问题

题目:有 n 个物品和一个最多能承受重量为 w 的背包。第 i 个物品的重量是 weight [i],价值是 value [i]。每件物品可以无限次使用,求解将哪些物品装入背包里物品价值总和最大。

思路

①与 01 背包的区别在于物品可以重复选取
②状态转移方程与 01 背包相同:dp [j] = max (dp [j], dp [j - weight [i]] + value [i])
③遍历顺序:先遍历物品,再正序遍历背包容量(允许重复选取同一物品)

def knapsack_complete(weight: list[int], value: list[int], w: int) -> int: n = len(weight) dp = [0] * (w + 1) for i in range(n): for j in range(weight[i], w + 1): dp[j] = max(dp[j], dp[j - weight[i]] + value[i]) return dp[w] # 测试 weight = [1, 3, 4] value = [15, 20, 30] w = 4 print(knapsack_complete(weight, value, w)) # 输出: 60

第三题:分割等和子集

题目:给你一个只包含正整数的非空数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

思路

①转化为 01 背包问题:是否能从数组中选出一些元素,使得它们的和等于总和的一半
②首先计算数组总和,如果是奇数直接返回 False
③定义 dp [j] 表示是否能组成和为 j 的子集
④状态转移方程:dp [j] = dp [j] or dp [j - nums [i]]、

def canPartition(nums: list[int]) -> bool: total_sum = sum(nums) if total_sum % 2 != 0: return False target = total_sum // 2 dp = [False] * (target + 1) dp[0] = True for num in nums: for j in range(target, num - 1, -1): dp[j] = dp[j] or dp[j - num] return dp[target] # 测试 print(canPartition([1,5,11,5])) # 输出: True print(canPartition([1,2,3,5])) # 输出: False

第四题:不同路径

题目:一个机器人位于一个 m x n 网格的左上角。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径?

思路

①定义 dp [i][j] 表示到达 (i,j) 位置的不同路径数
②状态转移方程:dp [i][j] = dp [i-1][j] + dp [i][j-1]
③边界条件:第一行和第一列的所有位置路径数都是 1

def uniquePaths(m: int, n: int) -> int: dp = [[1] * n for _ in range(m)] for i in range(1, m): for j in range(1, n): dp[i][j] = dp[i-1][j] + dp[i][j-1] return dp[m-1][n-1] # 测试 print(uniquePaths(3, 7)) # 输出: 28 print(uniquePaths(3, 2)) # 输出: 3

第五题:小写字母转大写字母

题目:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存

输入的字符串以!结束

if_name_=="__main__" fp=open("test.txt","w") string=raw_input("please input a string:\n") string=string.upper() fp.write(string) fp=open("test.txt","r") print fp.read() fp.close()
http://www.rkmt.cn/news/1513491.html

相关文章:

  • 雍俊海Java教程第二版课后编程题完整参考实现(含CH2/CH6/CH8)
  • VC++实现的IF-ELSE语句LL(1)语法分析与四元式生成工程
  • SpringBoot 3.2项目实战:除了虚拟线程,JDK21的这些新特性更值得你关注
  • 今天摸鱼了吗APP开发实战:基于HarmonyOS API 24的多层Stack与定时器应用
  • NPOI 2.5.1.0 .NET 4.0 全依赖二进制库包(含XML文档与Excel全格式支持)
  • 2026江苏技术过硬宣传片制作机构排行 核心维度实测对比 - 奔跑123
  • 性价比高的3%AFFF/AR抗溶性水成膜泡沫灭火剂厂家推荐:浙江金瑞恒守护能源安全 - 品牌速递
  • 国内售后完善的教学能力比赛拍摄服务商综合排行2026 - 奔跑123
  • ARM7汽车MCU MAC7100架构解析与eDMA、FlexCAN实战应用
  • Claude进入受监管系统前,接入层应该先怎么设计
  • CRISPR-Cas9新玩法:像调光开关一样,用uORF精细调控植物基因表达
  • Win7系统下惠普M1005激光一体机即装即用驱动包(32/64位双版)
  • AI-01开发板编译、烧录与双配网模式说明
  • 顺序表(动态数组)深度精讲,从零手写实现、扩容机制、边界处理、增删查改全解析与复杂度分析
  • Claude Corps给开发团队的启发:不是提示词,而是组织内嵌
  • 2026年 钟罩装置/钟罩气体装置/钟罩气体流量标准装置推荐榜单,高精度计量与稳定溯源实力之选 - 品牌发掘
  • 浙江金瑞恒稳居6%AFFF/AR抗溶性水成膜消防泡沫液品牌前十名,包裹保护泡沫 - 品牌速递
  • 浙江金瑞恒稳居3%AFFF/AR抗溶性水成膜泡沫灭火剂品牌前十名,全生命周期护航 - 品牌速递
  • Linux CPU 频率调节的 perf_events:性能事件辅助调频
  • 福州GEO优化代运营公司哪家好 - 舒雯文化
  • 拆解USB数据包:用Wireshark抓包分析一次鼠标点击背后的‘握手’与‘对话’
  • 2026 东莞新能源汽车音响改装不影响质保标杆:虎门杰生 31 年技术沉淀,定义行业无损改装天花板 - 汽车音响改装
  • 口碑好的6%AFFF/AR抗溶性水成膜消防泡沫液品牌推荐:浙江金瑞恒全生命周期护航 - 品牌速递
  • 盛世钢联2026年6月12日成都市场主要品种钢材价格行情汇总 - 四川盛世钢联营销中心
  • AI-02模组架构与Coze智能体接入说明
  • ARM7微控制器MAC71x1架构解析与嵌入式开发实战指南
  • 别再乱用抢占式调度了!聊聊AUTOSAR OS里Basic Task和Extended Task的实战选型心得
  • OSPF不规则区域/虚链路/重发布/Type_4/5LSA
  • 2026 西安靠谱婚恋公司权威推荐排行榜(依托行业调研、西北婚恋市场白皮书) - 星际AI
  • 口碑好的3%AFFF/AR抗溶性水成膜泡沫灭火剂品牌推荐:浙江金瑞恒展现国产替代实力 - 品牌速递