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]+" ");
}
}
}
思路只要跟着题目步骤来就差不多了,但是还是要学会好好的利用函数封装