问题描述 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。 输入格式 程序首先读入一个整数N(2<N<100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2) 输出格式 要求程序输出一个整数,表示老师需要补发的糖果数。 样例输入 3
2 2 4 样例输出
4
我的思路
一个数组存储小孩手里的糖(a[]),一个数组存储当前轮次小孩手里一半的糖(temp[])。
然后a[i+1]+=temp[i]。child[0]+=temp[child.length-1];
代码
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static Scanner scanf=new Scanner(System.in);
static int count=0; //老师发的糖果数量
public static void main(String[] args) {
int n = scanf.nextInt();
int [] child=new int [n]; //存储小孩手里的糖
int [] temp=new int [n];//存储当前轮次小孩手里糖的一半
for (int i = 0; i < child.length; i++) {
child[i]=scanf.nextInt();
}
while(isend(child)){ //如果所有小孩手里的糖不相等继续循环
for (int i = 0; i < temp.length; i++) {
temp[i]=child[i]/2; //把小孩手里的一半糖存入temp
child[i]-=child[i]/2; //减去一半
}
for (int i = 0; i < child.length-1; i++) {
child[i+1]+=temp[i]; //座标错一位加 。 给左边的小朋友
}
child[0]+=temp[child.length-1]; //把最后一个小朋友的糖给第一个小朋友
for (int i = 0; i < n; i++) { //遍历分糖后奇数个数糖的小朋友
if(child[i]%2!=0){
child[i]++;
count++;
}
}
}
System.out.println(count);
}
public static boolean isend(int [] child){
for (int i = 1; i < child.length; i++) {
if(child[i-1]!=child[i]){
return true;
}
}
return false;
}
}
这个本来觉得肯定过不了,没想到一次跑满分,瞬间也不想优化了。这完全是暴力嘛