第一题
for 循环遍历,选择 【陶陶身高+板凳高度】> 【苹果高度】的苹果
第二题
由于要组成[1, m]之间的所有数字,我们可以首先考虑无解的情况,即最小的硬币面值大于1,这样的话便不能组合出1 的情况。当最小硬币面值是1的时候则必定有解,因为最差m个1可以组合出[1, m]的所有情况。
这里我们可以考虑贪心的策略,考虑如下情况:假设硬币面值序列为【1,k(k>1)】;此时如果要组合出 [1, k-1] 的所有情况,我们只有一种方案,即选择 k-1 个 1,在组合 k 的时候,我们有两种选择:1)在加一个1;2)直接用k;第一种情况,用k个硬币组合出[1, k]的所有组合;第二种情况,用k个硬币(k-1个1和一个k)组合出了[1, 2k-1]的所有情况,很明显第二种选择更好。
所以我们的算法流程是:
- 初始化可组合最大范围 sm = 0,所选硬币数 ans = 0, 硬币数组 coins
- 从小到大枚举硬币的值,如果 sm < coins[i],sm += coins[i-1], ans++
- 如果 sm >= m,返回 ans
第三题
判断给定时间的最大数是多少,假设最大数是 n,则这个表至少是 n+1 进制。不存在即按照最小的进制计算H和M,存在 H>23或者M>59;无数解即H和M存在一位数且满足H<=23和M<=59;剩下的则遍历[n+1, 60] 进制,计算对应的 H 和 M,到不符合条件为止,顺带计数
第四题
排列组合或者 dfs 枚举