三个学生围成一圈,第1个学生有10块糖,第2个学生有2块糖,第3个学生有8块糖,然后所有的学生同时将自己手中的糖分一半给右边的小孩;糖块数为奇数的学生可以先向老师要一块糖再分给旁边小孩。

三个学生围成一圈,第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;
			}
			
			
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值