10个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为12,2,8,22,16,4,10,6, 14,20。
然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为奇数的人,
再向老师补要一块,问经过多少次调整后,大家的糖块一样多,且每人多少块。
int[] arr = {12,2,8,22,16,4,10,6,14,20};
int[] temp = new int[10]; //定义一个用来转移数据的数组
int item = 0; //用来计数
while(true){
for(int i = 0; i < arr.length; i++){ // 用temp 来存放 arr对应的一半
temp[i] = arr[i]/2;
}
for(int i = 1; i < arr.length; i++){ // 下方代码的循环缩写。
arr[i] = arr[i]/2 + temp[i-1];
}
// arr[1] = arr[1]/2+temp[0];
// arr[2] = arr[2]/2+temp[1];
// arr[3] = arr[3]/2+temp[2];
// arr[4] = arr[4]/2+temp[3];
// arr[5] = arr[5]/2+temp[4];
// arr[6] = arr[6]/2+temp[5];
// arr[7] = arr[7]/2+temp[6];
// arr[8] = arr[8]/2+temp[7];
// arr[9] = arr[9]/2+temp[8];
arr[0] = arr[0]/2+temp[9];
for(int i = 0; i < arr.length; i++){ // 判断是否是奇数,奇数加 1
if(arr[i]%2 != 0){
arr[i] = arr[i]+1;
}
}
item ++;
if(arr[0]==arr[1]&&arr[1]==arr[2]&&arr[2]==arr[3]&&arr[3]==arr[4]
&&arr[4]==arr[5]&&arr[5]==arr[6]&&arr[6]==arr[7]
&&arr[7]==arr[8]&&arr[8]==arr[9]){ // 虽然写的难看,但是效率比循环高
break;
}
System.out.println(Arrays.toString(arr)); // 每一次执行完 打印出来看一看
}
System.out.println("经过 "+item+" 次后 小朋友的糖果一样,有 "+arr[4]+"个");