高分求解JAVA一道题

有10个小朋友分糖这10个小朋友分别的糖数是:10、2、8、22、16、4、10、6、14、20每次每个小朋友将自己(从第一个算起走)的糖分给右边的小朋友,总颗数为奇数便... 有10个小朋友分糖
这10个小朋友分别的糖数是:10、2、8、22、16、4、10、6、14、20
每次每个小朋友将自己(从第一个算起走)的糖分给右边的小朋友,总颗数为奇数便向老师要一颗糖(是这样的 第一个小朋友的糖是10个,分一半就给是5个给第二个小朋友,分了过后这第一个小朋友的糖数是5,然后向老师要了一个变6。然后是第二个小朋友的糖数是2,现在不能加上第一个小朋友分给他的糖数再除2,而是他本身的糖数除2。第二个小朋友本身糖数是2,分了一半给第三个变成一个再加上第一个人分给他的糖数也就是5,变6,不用向老师要糖)依次类推.....(反正就这意思)直到每个小朋友手上的糖数一样为止。
问:一共要分几次糖?老师会拿出多少糖?小朋友的平均糖数是多少?

这样用JAVA编写这个?我还是菜鸟,请在复杂的地方写解释。 再追加100分
展开
 我来答
御兰芝Lp
2007-06-26 · 超过29用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:0
展开全部
//共分16次糖,老师拿出68颗糖;小朋友平均有18颗糖

package javatest;

public class Main {//主类

/** Creates a new instance of Main */
public Main() {//主类构造函数,可以不写
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {//主程序
// TODO code application logic here
Little little1=new Little();//这是个解决该问题的类
//System.out.println("Hello world!");
int times=0;//这是循环次数
do{
little1.runOnce();//10个小朋友循环操作一次
times++;//循环次数加1
}while(!little1.isAllSame());//直到所有的小朋友糖数一样为止
//后边是打印结果
System.out.println("Total running times: "+times);
System.out.println("The teacher will offer "+little1.getTeacherSug()+" sugars.");
System.out.println("Students will have "+little1.getSugar()+" sugars.");
}

}

//主类
class Little{
private int[] numSugar;//记录小朋友的糖数
private int teacher;//记录老师拿出来的糖数
public Little(){
numSugar=new int[]{10,2,8,22,16,4,10,6,14,20};//这是最开始小朋友的糖数
teacher=0;//最开始老师没有拿出糖
}
public int getTeacherSug(){return teacher;}//这是读取老师给的糖数
public boolean isAllSame(){//判断所有的小朋友糖数是否一样
//基本思想:总共有0,1,2,...n-1个小朋友,看1一直到n-1个人的糖数是否与他前一个人的糖数一致。
for(int i=1;i<numSugar.length;i++){
if(numSugar[i]!=numSugar[i-1])//如果不一致,糖数肯定不一样,返回false
return false;
}
return true;//否则,所有人糖数一样
}
public int getSugar(){return numSugar[0];}//只有当糖数一样时才能调用,返回小朋友的糖数

//运行一个循环
public void runOnce(){
//已开始,每个小朋友的糖数减半
for(int i=0;i<numSugar.length;i++){
numSugar[i]=numSugar[i]/2;
}
//然后从最后一个小朋友开始,加上前一个人的糖数就是现在的糖数.第一个小朋友要加上最后一个小朋友的糖数,所以先把最后一个人的糖数保存起来
int lastSugar=numSugar[numSugar.length-1];//最后一个人的
for(int i=numSugar.length-1;i>0;i--){//从n-1一直到第二个人
numSugar[i]+=numSugar[i-1];
}
numSugar[0]+=lastSugar;//第一个人的

//看是否要向老师要糖
for(int i=0;i<numSugar.length;i++){
if(numSugar[i]%2!=0){//如果不是偶数
numSugar[i]++;//向老师要一个
teacher++;//老师的糖数+1
}
}
//完了
}

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式