黑马程序员技术交流社区
标题:
分糖果
[打印本页]
作者:
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