题目描述:
小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果小明最少需要多少次 (取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗
分析:
小明能不能平均分配糖果,取决于他手中的糖果数是不是偶数,如果是,则他只记平均分配一次的次数,否则,则要记两次,放回或者取出的次数和平均分配的次数
java实现:
/**
* 小明从糖果盒中随意抓一把糖果,
* 每次小明会取出一半的糖果分给同学们。
* 当糖果不能平均分配时,
* 小明可以选择从糖果盒中(假设盒中糖果足够)
* 取出一个糖果或放回一个糖果小明最少需要多
* 少次 (取出、放回和平均分配均记一次)
* ,能将手中糖果分至只剩一颗
*/
public class CandyDistribution {
public static int distributeCandiesNew(int candies) {
int count = 0; // 记录操作次数
if (candies % 2 != 0) {
candies++; // 取出一个糖果,变为偶数
count++;
}
// 平均分配糖果,直到只剩一颗
while (candies > 1) {
if (candies != 2 && (candies / 2) % 2 != 0) {
count++;
}
candies /= 2; // 取出一半的糖果
count++;
}
return count;
}
public static void main(String[] args) {
int candies = 28 ;
int minOperations = distributeCandiesNew(candies);
System.out.println("最少需要的操作次数为:" + minOperations);
}
}
结果:
输入10,返回2,输入28,返回7