当前位置: 首页 > 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.jsqmd.com/news/1001713/

相关文章:

  • AutoJs6:安卓平台上最完整的JavaScript自动化实战指南
  • 观察者模式是什么:从订阅报纸到代码通知
  • JVM篇1--JVM内存结构
  • 雍俊海Java教程第二版课后编程题完整参考实现(含CH2/CH6/CH8)
  • 【计算机毕业设计案例】基于 SpringBoot 的自由行旅游行程规划系统的设计与实现(程序+文档+讲解+定制)
  • 全局计时器、智能提醒与UI交互实现
  • 解密Apollo配置中心的高可用设计:从长轮询到本地缓存,你的配置真的安全吗?
  • 从Q_PROPERTY到MVVM:手把手教你用属性系统重构臃肿的Qt业务逻辑
  • SpringBoot 3.2项目实战:除了虚拟线程,JDK21的这些新特性更值得你关注
  • 孤舟笔记 分布式与微服务篇二十四 IaaS、PaaS、SaaS有啥区别?三个字母搞懂云计算三层模型
  • 手机号找回QQ号完整指南:3分钟破解账号记忆难题
  • Quake3e:现代图形API如何重塑经典竞技场引擎的技术架构
  • VC++实现的IF-ELSE语句LL(1)语法分析与四元式生成工程
  • 从上传到播放:手把手模拟一次YouTube视频的‘奇幻漂流’(附FFmpeg转码命令实操)
  • CAD二次开发避坑指南:VBA选择集过滤时,为什么你的‘*Polyline’选不中所有多段线?
  • 今天摸鱼了吗APP开发实战:基于HarmonyOS API 24的多层Stack与定时器应用
  • Flutter 实战:simple_paint 手绘画板的手势采样、CustomPainter 绘制与鸿蒙适配解析
  • 突破60帧枷锁:原神帧率解锁工具完全指南
  • NPOI 2.5.1.0 .NET 4.0 全依赖二进制库包(含XML文档与Excel全格式支持)
  • 2026江苏技术过硬宣传片制作机构排行 核心维度实测对比 - 奔跑123
  • 从‘烤机’到‘炼丹’:聊聊不同场景下CUDA线程配置的实战经验(附V100/A100对比)
  • OpenCore Configurator:黑苹果引导配置的终极可视化工具指南
  • 性价比高的3%AFFF/AR抗溶性水成膜泡沫灭火剂厂家推荐:浙江金瑞恒守护能源安全 - 品牌速递
  • 国内售后完善的教学能力比赛拍摄服务商综合排行2026 - 奔跑123
  • NXP i.MX 6 SABRE开发板:从硬件参考设计到产品实战全解析
  • ARM7汽车MCU MAC7100架构解析与eDMA、FlexCAN实战应用
  • 面向对象:this关键字;构造器
  • Claude进入受监管系统前,接入层应该先怎么设计
  • 2026年AI精准获客TOP5技巧,让您的业务增长不再难 - 轩铭卿
  • CRISPR-Cas9新玩法:像调光开关一样,用uORF精细调控植物基因表达