解题思路:
1,首先将原本糖果个数和要给左边孩子的糖果个数分为两个数组分别为ar1[i]和ar2[i],
ar2[i]为ar1[i]的1/2,ar1[i]变为1/2表示有一半糖果被移走,为下一步与左边孩子分
到的糖果ar2[i]进行相加做好铺垫。
2,第一个循环把自己要分给左边孩子的糖储存进ar2[i]中,然后自身的值/2,不过因为
小朋友是围圈坐在一起的,所以最后一位孩子要给第一位孩子糖果,所以要设置个if,
当到最后一位时候,让他去给第一位孩子糖果。
3,第二个循环是加上旁边孩子给的糖果,因为我们把要拿到的糖果储存到了ar2里面,
所以这里直接相加就好。
4、最后判断糖果的个数,糖果个数为奇数孩子的糖果数目+1,使其变为偶数。然后判断
孩子手里的糖是否相等,因为我们在循环开头就让boo = false,这样到后面判断时候,
孩子手里面的糖不相等的时候就让boo = true 继续执行。如果相等就会停止循环。
注意事项:
题目其实很简单,给的条件很明确,用代码模拟就好了,弄明白思路很简单的哦。
(核心在于模拟场景)
参考代码:
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] ar1 = new int[n]; int[] ar2 = new int[n]; for (int i = 0; i < n; i++) { ar1[i] = sc.nextInt(); } boolean boo = true; int sum = 0; // 补发的棒棒糖 while (boo){ boo = false; for (int i = 0; i < n; i++) { // 把要给左边小朋友的糖保存在ar2里面,然后自身糖果减半 = ar1[i]/2。 if (i == n-1){ ar2[0] = ar1[i]/2; ar1[i] = ar1[i]/2; }else { ar2[i+1] = ar1[i]/2; ar1[i] = ar1[i]/2; } } for (int i = 0; i < n; i++){ // 把旁边小朋友给的糖果加上 ar1[i] += ar2[i]; } for (int i = 0; i < n; i++) { // 判断小朋友手里的糖果是否为奇数,是的话sum加一 if (ar1[i]%2 != 0){ ar1[i] += 1; sum += 1; } if (ar1[0] != ar1[i]){ // 判断小朋友手里面的糖果是否相等 boo = true; } } } System.out.println(sum); } }
0.0分
8 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复