当前位置 : 主页 > 编程语言 > java >

【2014省赛试题】分糖果

来源:互联网 收集:自由互联 发布时间:2022-08-15
标题:分糖果 有 n 个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子


标题:分糖果

  • 有 n 个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
    每个小朋友都把自己的糖果分一半给左手边的孩子。
    一轮分糖后,拥有奇数颗糖的孩子由老师补给个糖果,从而变成偶数。
    反复进行这个游戏,直到所有小朋友的糖果数都相同为止
    你的任务是预在已知的初始糖果情形下,老师一共需要补发多少个糖果。

【格式要求】

  • 程序首先读入一个整数 N (2<N<100),表示小朋友的人数。
  • 接着是一行用空格分开的 N 个偶数(每个偶数不大于1000,不小于2)
  • 要求程序输出一个整数,表示老师需要补发的糖果数。
    输入:
    3
    2 2 4
    程序输出:
    4
public class Text08_分糖果 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt(); // 小朋友的人数
if ( n<2 || n>100 ) {
return;
}
int[] arr = new int[n]; // 记录每个小朋友的糖果数
int sweets;
for (int i = 0; i < arr.length; i++) {
arr[i] = input.nextInt();
if ( (arr[i]) < 2 || (arr[i]>1000) || (arr[i]%2==1) ) return; // 糖果数为偶数
}
int sum = 0;
while (true){
// 分糖果 --- 闭合的环
for (int i = 1; i < arr.length-1; i++) {
arr[i+1] = arr[i+1]/2; // 右边小朋友分出的一半糖果
arr[i] += arr[i+1]/2; // 左边小朋友获取分得的糖果
arr[i] = arr[i] / 2;
arr[i-1] += arr[i];
arr[i-1] = arr[i-1]/2;
arr[i+1] += arr[i-1];
}
// 老师补发糖果
for (int a:arr) {
if (a%2!=0){
a +=1;
sum++;
}
}
// 判断所有的小朋友糖果数是否相等
if (check(arr)){
System.out.println(sum);
break;
}
}
}
// 判断每个小朋友的糖果数是否相等
public static boolean check(int[] arr){
int m = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i]!= m) return false;
}
return true;
}
}

【2014省赛试题】分糖果_i++

​​注意:这里是小朋友围坐成一圈,所以是个闭合的环!!!​​



上一篇:Echarts --- 可视化练习(bar01)
下一篇:没有了
网友评论