黑马程序员技术交流社区

标题: 分糖果 [打印本页]

作者: JRT    时间: 2015-4-30 19:00
标题: 分糖果
/*75.10个小孩分糖果
十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次后大家手中的糖的块数一样多?每人各有多少块糖?
*问题分析与算法设计
题目描述的分糖过程是一个机械的重复过程
1、首先考虑数据存储方式(两个一维数组,一个用来存放原始数据,一个做中间桥梁)
2、一个计数器:count
*/

public class FenTangGuo {
        public static void main(String[] args) {
                //用数组来存放老师给每个人的糖果
        int[] baby={10,2,8,22,16,4,10,6,14,20};
        //定义一个临时数组来作为每次交换的媒介(桥梁)
        int[] temp=new int[10];
        //定义一个计数器统计次数
        int count=0;
        while(judge(baby)==false){
                //将每个孩子的糖果分成一半
                for(int i=0;i<10;i++){
                        //偶数直接分
                        if(baby%2==0) temp=baby=baby/2;
                        //奇数加一个
                else temp=baby=(baby+1)/2;
                }
       //所有的小孩同时将手中的糖分一半给右边的小孩
                for(int j=0;j<9;j++){
                        baby[j+1]+=temp[j];
                }
              //最后一个孩子分一半糖果给第一个孩子
                baby[0]+=temp[9];
System.out.println("第"+(++count)+"次分糖果的结果如下:");
                printArray(baby);
        }
  System.out.println("每人各有"+baby[0]+"块糖");
        }
        //定义一个函数判断是否大家手中的糖果数一样多
        public static boolean judge(int[] a){
//用其他的和一个孩子的糖依次作比较,如果有一个不同就返回false
                for(int i=0;i<10;i++){
                        if(a[0]!=a) return false;
                }
          return true;
        }
//封装一个方法来打印每次分糖的情况
        public static void printArray(int[] a){
                for(int i=0;i<10;i++){
                        System.out.print(a+"\t");
                }
                System.out.println();
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2