java之分糖果问题

  • Post author:
  • Post category:java




java之分糖果问题


题目:


10个小孩围成一圈分糖果,老师分给第1个小孩10块,

  • 第2个小孩2块,第3个小孩8块,第4个小孩22块,第5个小孩16块
  • ,第6个小孩4块,第7个小孩10块,第8个小孩6块,第9个小孩14块,
  • 第10个小孩20块。
  • 然后所有的小孩同时将手中的糖分一半给右边的小孩;
  • 糖块数为奇数的人可向老师要一块。
  • 问经过这样几次后大家手中的糖的块数一样多?每人各有多少块糖?

效果如下:

在这里插入图片描述

/**
 * 
 */
package javaLearn;

/**
 * @author Administrator
 *qq:1012885458
 */
public class 分糖果 {	
	public static void main(String args[]) {
		int tang[]= {10,2,8,22,16,4,10,6,14,20};
		int times=0;
		boolean	b=true;
		//判断糖果是否分配好,如果没有就继续分
		while(isSame(tang)==false) {
			//防止被覆盖,备份
			int m=tang[9];
			//循环分糖果;
			for(int i=9;i>0;i--) {
				tang[i]=tang[i]/2+tang[i-1]/2;
			}
			tang[0]=m/2+tang[0]/2;
			//记录分糖果的次数;
			times++;
			System.out.printf("\n 第 %d 次的糖果为:\n",times);
			show(tang);
			
			//糖果为奇数的向老师要一块;
			for(int i=0;i<10;i++) {
				if(tang[i]%2!=0) {
					tang[i]+=1;
				}
				
			}
			
		}
		System.out.println("\n分糖果的次数:"+times);
		
		System.out.println("每个人的最终的糖果的个数为:"+tang[0]);
	}
	//判断数组中的值是否全部相等;
	public static boolean isSame(int[] a) {
		int n=0;
		boolean b=false;
		//数组循环一遍
		for(int i=0;i<a.length-1;i++) {
			//如果相邻的两个数相等,计数器加一;
			if(a[i]==a[i+1]) {
				n++;
			}
			//全部相等判断;
			if(n==a.length-1) {
				b=true;
			}		
		}
		return b;
		
	}
	
	//显示数组中的值;
	public static void show(int[] a) {
		if(a==null) {
			System.out.println("Array=null!");
		}
		//循环输出数组中的元素;
		for(int i=0;i<a.length;i++) {
			System.out.print(a[i]+" ");
		}
		
	}
	
	
}

思路只要跟着题目步骤来就差不多了,但是还是要学会好好的利用函数封装



版权声明:本文为weixin_42590083原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。