解题思路:
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分
12 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:674 |
【偶数求和】 (C++代码)浏览:785 |
字符逆序 (C语言代码)浏览:645 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:537 |
C二级辅导-分段函数 (C语言代码)浏览:659 |
简单的a+b (C语言代码)浏览:491 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:529 |
众数问题 (C语言代码)浏览:717 |
1218题求大神帮忙看看怎么不能过浏览:759 |
DNA (Java代码)浏览:971 |