日期:2014-05-20  浏览次数:20608 次

一道分糖果的题,求大神帮忙看看程序哪里出问题了,或者说给我个思路
package example;
import java.util.*;
public class 分糖果 {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner in=new Scanner(System.in);
int sum=0;    //总计数老师补发了多少糖果
int n=in.nextInt();
int a[]=new int[100];
for(int j=0;j<n;j++){
a[j]=in.nextInt();
}
while(true)
{
int i;
for(i=0;i<a.length;i++)
{
int t=a[i]/2;
a[i]-=t;
a[i+1]+=t;
}
if(a[i]/2!=0)
{
a[i]++;//老师补齐奇数糖果的孩子
sum++;
}
if(a[i+1]/2!=0)
{
a[i+1]++;
sum++;
}
if(a[i]==a[i+1]){
break;
}
continue;
}
System.out.println(+sum);
}
}

------解决方案--------------------
1、判断是不是偶数   应该模除 %
2、是不是偶数的判断对象是全体 ,而不是最后两个
3、人数应该是n,而不是固定的100
4、跳出循环时的条件,是所有人的糖果数目相同,而不是最后两个
5、所有的人,形成一个环,第一个的一半应该给最后一个人
代码:
package com.nzz.Temp;

import java.util.*;

public class 分糖果 {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner in = new Scanner(System.in);
int sum = 0; // 总计数老师补发了多少糖果
int temp = 0;
int n = in.nextInt();

int a[] = new int[n];
for (int j = 0; j < n; j++) {
a[j] = in.nextInt();
}

while (true) {

// 拥有奇数颗糖的孩子由老师补给1个糖果 从而变成偶数
for (int i = 0; i < a.length; i++) {
if (a[i] % 2 != 0) {
a[i]++;// 老师补齐奇数糖果的孩子
sum++;
}
}

// 每个小朋友都把自己的糖果分一半给左手边的孩子
for (int i = 0; i < a.length; i++) {
a[i] = a[i] / 2;
}
temp = a[0];
for (int i = 0; i < a.length - 1; i++) {

a[i] = a[i] + a[i + 1];
}
a[a.length - 1] = a[a.length - 1] + temp;


//所有小朋友的糖果数都相同
int x = 0;
for (int i = 0; i < a.length - 1; i++) {
if (a[i] == a[i + 1])
++x;
}
if (x == a.length - 1) {
System.out.print(sum);
break;
}

}
}
}