最新华为OD机试
2025华为od 机试2025B卷-华为机考OD2025年B卷
题目描述
构造数列,第一个数为n,后面的数不大于前一个的一半,数列奇偶相间或许全为奇数或者全为偶数,数列的元素都是正整数,能构造多少数列。
输入描述
输入一个n
备注
1 <= n < 10000
输出描述
输出可以构造的序列个数
示例1
输入
7
输出
6
说明
可以构成 [7], [7,3], [7,2], [7, 1], [7,3,1],[7,2,1]
示例2
输入
4
输出
3
说明
可以构成 [4],[4,2],[4,1]
解题思路
题目理解
这是一个动态规划问题,目标是计算满足特定条件的递增序列数量。从代码分析,题目要求:
- 序列必须以数字
n
结尾 - 序列是严格递增的
- 相邻元素需要满足:后一个元素 > 前一个元素的2倍(即
a[i+1] > 2 * a[i]
)
核心思路
1. 状态分类
代码将所有可能的序列分为4类:
- 纯奇数序列:所有元素都是奇数
- 纯偶数序列:所有元素都是偶数
- 交替序列(末尾奇数):相邻元素奇偶性交替,最后一个是奇数
- 交替序列(末尾偶数):相邻元素奇偶性交替,最后一个是偶数
2. 动态规划状态定义
odd[i]
:以位置i结尾的纯奇数序列数量even[i]
:以位置i结尾的纯偶数序列数量altOdd[i]
:以位置i结尾且最后是奇数的交替序列数量