三个学生围成一圈,第1个学生有10块糖,第2个学生有2块糖,第3个学生有8块糖,然后所有的学生同时将自己手中的糖分一半给右边的小孩;糖块数为奇数的学生可以先向老师要一块糖再分给旁边小孩。问经过几次后大家手中的糖的块数一样?并且说明每次调整后每个人手中糖的数量。如果该程序中学生数量变换了您的程序可适应吗?
import java.util.Arrays;
public class A {
public static void main(String[] args) {
int[] a = {10,2,8};//数组中元素就是人数,可随意增减
fenTang(a);
}
public static void fenTang(int[] a){
int count = 0;
while (isEquals(a)) {
for(int i = 0;i<a.length;i++){//1.奇数变偶数
if((a[i]%2) != 0){ //如果是奇数
a[i]++; //则再加一块糖
}
}
int[] b= new int[a.length];
int temp = a[a.length-1] / 2 ;//这个是每个人分出去的那一半,每个人分给下一个,则最后一个分给第一个,所以初始化是最后一个的一半。
for (int i = 0; i < a.length; i++) {
b[i] = a[i] / 2 + temp ;//每个人的糖是上一个人分自己一半加自己剩下的一半
temp = a[i] / 2;//变量变化
}
a = b;
count++;
System.out.println("第" + count + "次" + Arrays.toString(a));
}
}
public static boolean isEquals(int[] a) {
for (int i = 1; i < a.length; i++) {
if(a[i] != a[0]) {
return true;//这个方法验证每个人手里糖是否相等
}
}
return false;
}
}