分糖果
问题描述:10个小朋友围成一圈,老师给每个小朋友若干个糖果,每个小朋友把自己糖果的一半分给右边的小朋友,分完一次后,如果有小朋友拥有的糖果数为奇数,老师会为这个小朋友补给1个糖果,然后继续把自己糖果的一半分给右边的小朋友,如果剩余糖果为奇数,老师补给1个,反复操作,直到所有的小朋友拥有的糖果数相等时游戏结束。
思路分析:
把整个游戏分成三个方法实现:isGameOver()判断游戏是否结束,Distribution()给右边的小朋友分发自己数量一半的糖果,Supply()老师补给糖果
程序代码:
import java.util.Arrays;
public class DivideCandy {
public static void main(String[] args) {
int[] a = {10,2,8,22,16,4,10,6,14,20};
while(isGameOver(a)==false) {
Distribution(a);//先分配
System.out.println(Arrays.toString(a));
Supply(a);//后补给
System.out.println(Arrays.toString(a));
}
System.out.println(Arrays.toString(a));
}
public static void Distribution(int[] a) {
int halfoflast = a[9]/2;
a[9] = a[9]/2;
for(int i=9;i>=1;i--) {
a[i] = a[i]+a[i-1]/2;//右边的等于左边的一半加上原来的
a[i-1] = a[i-1]/2;//左边的只剩一半
}
a[0] = a[0]+halfoflast;
}
public static void Supply(int[] a) {
for(int i=0;i<a.length;i++) {
if(a[i]%2==1) a[i]++;//奇数老师补给1个
}
}
public static boolean isGameOver(int[] a) {
for(int i=1;i<a.length;i++) {
if(a[i]!=a[0]) return false;
}
return true;
}
}
运行结果:
[15, 6, 5, 15, 19, 10, 7, 8, 10, 17]
[16, 6, 6, 16, 20, 10, 8, 8, 10, 18]
[17, 11, 6, 11, 18, 15, 9, 8, 9, 14]
[18, 12, 6, 12, 18, 16, 10, 8, 10, 14]
[16, 15, 9, 9, 15, 17, 13, 9, 9, 12]
[16, 16, 10, 10, 16, 18, 14, 10, 10, 12]
[14, 16, 13, 10, 13, 17, 16, 12, 10, 11]
[14, 16, 14, 10, 14, 18, 16, 12, 10, 12]
[13, 15, 15, 12, 12, 16, 17, 14, 11, 11]
[14, 16, 16, 12, 12, 16, 18, 14, 12, 12]
[13, 15, 16, 14, 12, 14, 17, 16, 13, 12]
[14, 16, 16, 14, 12, 14, 18, 16, 14, 12]
[13, 15, 16, 15, 13, 13, 16, 17, 15, 13]
[14, 16, 16, 16, 14, 14, 16, 18, 16, 14]
[14, 15, 16, 16, 15, 14, 15, 17, 17, 15]
[14, 16, 16, 16, 16, 14, 16, 18, 18, 16]
[15, 15, 16, 16, 16, 15, 15, 17, 18, 17]
[16, 16, 16, 16, 16, 16, 16, 18, 18, 18]
[17, 16, 16, 16, 16, 16, 16, 17, 18, 18]
[18, 16, 16, 16, 16, 16, 16, 18, 18, 18]
[18, 17, 16, 16, 16, 16, 16, 17, 18, 18]
[18, 18, 16, 16, 16, 16, 16, 18, 18, 18]
[18, 18, 17, 16, 16, 16, 16, 17, 18, 18]
[18, 18, 18, 16, 16, 16, 16, 18, 18, 18]
[18, 18, 18, 17, 16, 16, 16, 17, 18, 18]
[18, 18, 18, 18, 16, 16, 16, 18, 18, 18]
[18, 18, 18, 18, 17, 16, 16, 17, 18, 18]
[18, 18, 18, 18, 18, 16, 16, 18, 18, 18]
[18, 18, 18, 18, 18, 17, 16, 17, 18, 18]
[18, 18, 18, 18, 18, 18, 16, 18, 18, 18]
[18, 18, 18, 18, 18, 18, 17, 17, 18, 18]
[18, 18, 18, 18, 18, 18, 18, 18, 18, 18]
[18, 18, 18, 18, 18, 18, 18, 18, 18, 18]