题目描述
小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。
当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。
小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。
输入描述
抓取的糖果数(<10000000000):15
输出描述
最少分至一颗糖果的次数:5
用例1
输
输出
5
说明
15+1=16;
16/2=8;
8/2=4;
4/2=2;
2/2=1;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
System.out.println(splitCandy(num, 0));
}
public static int splitCandy(int num, int count) {
if (num == 1)return count;
if (num % 2 == 0) {
return splitCandy(num / 2, ++count);
} else {
return Math.min(splitCandy((num + 1) / 2, count + 2), splitCandy((num - 1) / 2,
count + 2));
}
}
}
4820

被折叠的 条评论
为什么被折叠?



