算法练习,分糖果
2018-02-07 08:58
369 查看
/* * 问题描述 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。 输入格式 程序首先读入一个整数N(2<N<100),表示小朋友的人数。 接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2) 输出格式 要求程序输出一个整数,表示老师需要补发的糖果数。 样例输入 3 2 2 4 样例输出 4 * */
import java.util.Scanner; public class Main8 { private static int addNum;//添加糖果的数量 public static void main(String args[]){ Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); String s = scanner.nextLine(); int[] sweetNum = new int ; String[] str = scanner.nextLine().split(" "); for (int i = 0;i<n;i++){ sweetNum[i] = Integer.parseInt(str[i]); } candy(sweetNum); System.out.println(addNum); } private static void candy(int[] sweetNum) { while (true){ if(equles(sweetNum)){//判断每个人的糖果数是否相等,如果相等則退出循環 return; }else { //定义一个临时变量来存放第一个小朋友的糖果数量 c43b int temp = sweetNum[0]; //开始把自己的糖果分一半给左手边的孩子 for (int i = 0;i<sweetNum.length-1;i++){ sweetNum[i] = sweetNum[i+1]/2 + sweetNum[i]/2;//每个孩子的糖果数=右手边小朋友给的一半+自己所有糖果数的一半 } //第一个小朋友的糖果数分一半给最后一个小朋友的糖果数 sweetNum[sweetNum.length-1] = temp/2 + sweetNum[sweetNum.length-1]/2; //循环判断每个小朋友手上的糖果数的数量是否为奇数,如果是则addNum+1,且小朋友手上的糖果数也+1 for (int i = 0;i<sweetNum.length;i++){ if (sweetNum[i] % 2 != 0){ addNum++; sweetNum[i]++; } } } } } private static boolean equles(int[] sweetNum) { int n = 0; //从第2个小朋友开始依次与第一次小朋友进行比较,如果相等则n+1 for (int i = 1;i<sweetNum.length;i++){ if (sweetNum[i] == sweetNum[0]){ n++; } } //从第2个小朋友开始依次与第一次小朋友进行比较,如果相等则n+1 if (n == sweetNum.length-1) return true; return false; } }
/* * 问题描述 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。 输入格式 程序首先读入一个整数N(2<N<100),表示小朋友的人数。 接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2) 输出格式 要求程序输出一个整数,表示老师需要补发的糖果数。 样例输入 3 2 2 4 样例输出 4 * */
import java.util.Scanner; public class Main8 { private static int addNum;//添加糖果的数量 public static void main(String args[]){ Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); String s = scanner.nextLine(); int[] sweetNum = new int ; String[] str = scanner.nextLine().split(" "); for (int i = 0;i<n;i++){ sweetNum[i] = Integer.parseInt(str[i]); } candy(sweetNum); System.out.println(addNum); } private static void candy(int[] sweetNum) { while (true){ if(equles(sweetNum)){//判断每个人的糖果数是否相等,如果相等則退出循環 return; }else { //定义一个临时变量来存放第一个小朋友的糖果数量 int temp = sweetNum[0]; //开始把自己的糖果分一半给左手边的孩子 for (int i = 0;i<sweetNum.length-1;i++){ sweetNum[i] = sweetNum[i+1]/2 + sweetNum[i]/2;//每个孩子的糖果数=右手边小朋友给的一半+自己所有糖果数的一半 } //第一个小朋友的糖果数分一半给最后一个小朋友的糖果数 sweetNum[sweetNum.length-1] = temp/2 + sweetNum[sweetNum.length-1]/2; //循环判断每个小朋友手上的糖果数的数量是否为奇数,如果是则addNum+1,且小朋友手上的糖果数也+1 for (int i = 0;i<sweetNum.length;i++){ if (sweetNum[i] % 2 != 0){ addNum++; sweetNum[i]++; } } } } } private static boolean equles(int[] sweetNum) { int n = 0; //从第2个小朋友开始依次与第一次小朋友进行比较,如果相等则n+1 for (int i = 1;i<sweetNum.length;i++){ if (sweetNum[i] == sweetNum[0]){ n++; } } //从第2个小朋友开始依次与第一次小朋友进行比较,如果相等则n+1 if (n == sweetNum.length-1) return true; return false; } }
相关文章推荐
- 蓝桥杯练习:算法提高 拿糖果
- 算法笔记_095:蓝桥杯练习 拿糖果(Java)
- 2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡(模拟)
- 算法练习-NOJ-1005-装载问题
- 2018年全国多校算法寒假训练营练习比赛(第二场) F 德玛西亚万岁(状态压缩DP 未解决)
- 算法提高 拿糖果
- 算法(Algorithms)第4版 练习 2.1.1
- 算法练习
- 算法-第四版-练习1.3.12解答
- 算法分析课每周练习 Word Search II
- 算法练习-NOJ-1008-素数环问题
- 算法分析课每周练习 Merge k Sorted Lists
- 算法练习——聪明的情侣
- 算法(Algorithms)第4版 练习 2.1.24
- 2018年全国多校算法寒假训练营练习比赛(第一场)G - 圆圈(分形)
- 46.贪心算法练习: 区间合并
- [算法练习]最长公共子串(LCS)
- 2018年全国多校算法寒假训练营练习比赛(第三场)A
- 算法-第四版-练习1.3.31解答
- 2018年全国多校算法寒假训练营练习比赛(第三场)G