本专栏收录于《华为OD机试(JavaScript)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。
小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。
当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。
小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。
抓取的糖果数(<10000000000):
27
最少分至一颗糖果的次数:
7
啥意思呢?
懂了?
// 定义一个递归函数,用于计算能够分配的最大糖果数
function countCandies(sum, count) {
// 如果将糖果平均分配后,每个人最多只能得到 1 颗糖果,直接返回当前计数值
if (sum <= 1) {
return count;
}
// 如果糖果总数是偶数,将糖果平均分配
if (sum % 2 === 0) {
return countCandies(sum / 2, count + 1);
}
// 如果糖果总数是奇数,将其加一或减一变为偶数,并递归计算
return Math.min(
countCandies(sum + 1, count + 1), // 加一后递归计算
countCandies(sum - 1, count + 1) // 减一后递归计算
);
}
下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。