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

CSP 2024 入门级第一轮(88.5)

4.

以下哪个序列对应数字 00 至 88 的 44 位二进制格雷码(Gray code)?( )

  1.  A. 

    0000, 0001, 0011, 0010, 0110, 0111, 0101, 1000

     B. 

    0000, 0001, 0011, 0010, 0110, 0111, 0100, 0101

     C. 

    0000, 0001, 0011, 0010, 0100, 0101, 0111, 0110

     D. 

    0000, 0001, 0011, 0010, 0110, 0111, 0101, 0100

正解:D

错解:A 

原因:首先,格雷码具有以下性质:

  1. 相邻两个编码只能有一位不同。
  2. 首尾两个编码视作相邻,也只能有一位不同。
  3. 同一编码不能重复出现。
  • A 选项:0111 和 0101 有两位不同(从右往左数第 2 位和第 3 位),不满足相邻两个编码只能有一位不同的性质,所以 A 选项错误。
  • B 选项:0111 和 0100 有两位不同(从右往左数第 1 位和第 3 位),不满足相邻两个编码只能有一位不同的性质,所以 B 选项错误。
  • C 选项:0110 和 0000 有三位不同(从右往左数第 1 位、第 2 位和第 4 位),不满足首尾两个编码只能有一位不同的性质,所以 C 选项错误。
  • D 选项:该序列中相邻两个编码都只有一位不同,且首尾两个编码 0000 和 0100 也只有一位不同,同时没有重复的编码,满足格雷码的所有性质,所以 D 选项正确。

17-5

如果输入的 cost 数组为 ={10,15,30,5,5,10,20},程序的输出为()。

 A. 25

 B. 30

 C. 35

 D. 40

正解:B

错解:A 

原因:compute 函数实现了一个DP的逻辑:

dp[i] 表示处理到第 i 个元素时的最小成本(cost 数组)。

状态转移方程:dp[i] = min(dp[i-1], dp[i-2]) + cost[i-1] ,即第 i 步的最小成本,是 前 1 步最小成本 和 前 2 步最小成本 中的较小值,加上当前元素的成本(cost[i-1] 是因为数组下标从 0 开始 )。

返回 min(dp[n], dp[n-1]) ,即处理完所有元素后,最后一步 和 倒数第二步 的最小成本中的较小值。(打擂台)

2. 代入数据计算

输入 cost 数组为 [10, 15, 30, 5, 5, 10, 20] ,n = 7 ,然后打一个表逐步计算 dp 数组的值:

icost[i-1]dp[i] = min(dp[i-1], dp[i-2]) + cost[i-1]dp 数组值
110dp[1] = cost[0] = 10dp[1] = 10
215min(dp[1]=10, dp[0]=0) + 15 = 0 + 15 = 15dp[2] = 15
330min(dp[2]=15, dp[1]=10) + 30 = 10 + 30 = 40dp[3] = 40
45min(dp[3]=40, dp[2]=15) + 5 = 15 + 5 = 20dp[4] = 20
55min(dp[4]=20, dp[3]=40) + 5 = 20 + 5 = 25dp[5] = 25
610min(dp[5]=25, dp[4]=20) + 10 = 20 + 10 = 30dp[6] = 30
720min(dp[6]=30, dp[5]=25) + 20 = 25 + 20 = 45dp[7] = 45

最后返回 min(dp[7], dp[6]) = min(45, 30) = 30 。

所以,程序输出为 30 。

20-5

  1. ⑤ 处应填( )
    A. 0
    B. 1
    C. i - 1
    D. i

正解:B

错解:A 

 原因:

回顾汉诺塔的地柜逻辑

  1. 把 n-1 个圆盘从 原柱子(源代码中src 借助 目标柱子(源代码中tgt 移动到 中间柱子(源代码中tmp 。
  2. 把第 n 个圆盘从 原柱子(src 直接移动到 目标柱子(tgt 。
  3. 把 n-1 个圆盘从 中间柱子(tmp 借助 原柱子(src 移动到 目标柱子(tgt 。

代码逻辑

  • 函数 dfs(int i, char src, char tmp, char tgt) 中:
    • i 表示要处理的圆盘数量(从最上面第 1 个到第 i 个圆盘 )。
    • src 是 “原柱子”,tmp 是 “中间柱子”,tgt 是 “目标柱子”。
  • 终止条件:当 i == 1 时,直接把这 1 个圆盘从 src 移到 tgt 。
  • 递归过程:
    • 第一步递归 dfs(i - 1, src, tgt, tmp) :把 i-1 个圆盘从 src 借助 tgt 移到 tmp (对应 把 n-1 个圆盘从原柱子借助目标柱子移到中间柱子 )。
    • 然后执行 move(src, tgt) :把第 i 个圆盘从 src 移到 tgt (对应 把第 n 个圆盘从原柱子移到目标柱子 )。
    • 第二步递归:需要把 i-1 个圆盘从 tmp 借助 src 移到 tgt ,即 dfs(i - 1, tmp, src, tgt) 。这一步对应第 5 空,所以第 5 空应填 i - 1 。
http://www.xdnf.cn/news/1047835.html

相关文章:

  • WebSocket网络通信架构设计详解
  • Linux系统编程 | IPC对象---共享内存
  • 【JS-2】JavaScript基础语法完全指南:从入门到精通
  • 【系统设计【2】】粗略估算
  • 量化面试绿皮书:14. 钟表零件
  • 【人工智能数学基础】实变函数与泛函分析
  • Rokid AR交互开发工具对比
  • 不同conda 不同cuda版本方法
  • 使用存储型 XSS 窃取 cookie 并发送到你控制的服务器
  • Seelen UI 是Windows 桌面开发
  • 安卓9.0系统修改定制化____深入解析安卓 9.0 各手机分区:功能、作用与差异 基础篇二
  • 防火墙技术、模型、发展趋势、局限性及安全体系相关分析
  • 【LangChain】5 评估
  • 第20篇:数据库中间件的热点 Key 缓存一致性策略与分布式协调机制
  • JavaScript 与 Vue 键盘事件全面指南(Composition API + <script setup>)
  • 【微服务】134:SpringCloud
  • 个人AI助理智能体之tool_calling_agent实战指南
  • 61、数据访问-自定义方式整合druid数据源
  • 计算机网络学习笔记:TCP三报文握手、四报文挥手
  • Ubuntu 安装并使用 Elasticsearch
  • ROS2中,在工作空间根目录下执行source ./install/setup.bash的作用?
  • Java里ArrayList和LinkedList有什么区别?
  • 第二十九场 蓝桥算法赛
  • 基于MediaPipe的手指目标跟踪与手势识别+人体姿态识别估计:MediaPipe与OpenPose算法对比
  • 【iReport】实际开发中,解决iReport中打印图片不显示问题
  • LangChain框架:AI应用开发利器
  • Uncaught (in promise) TypeError: x.isoWeek is not a function
  • Flink CDC MySQL 表字段定义为 decimal 输出乱码问题优雅解决方式
  • Spring Boot多数据源切换:三种实现方式详解与实战
  • mac如何使用tensorboardx?