原题链接:蓝桥杯2014年第五届真题-分糖果
解题思路:1.获取人数和每个小朋友得到的糖果数
2.把每个小朋友的糖果分成一半给前面一位小朋友,这就需要两个数组来进行计算
3.分完后在判断每个小朋友的糖果数是否为奇数,如果为奇数,就加一,并且记录次数
注意事项:第一位小朋友获得的糖果是最后一位小朋友分出来的一半糖果,要单独判断
参考代码:
Scanner scanner=new Scanner(System.in); //小朋友的人数 int renshu=scanner.nextInt(); //把每个小朋友分到的糖果数放入数组中 int[] sum=new int[renshu]; //循环输入每个小朋友分到的糖果树 for (int i = 0; i < renshu; i++) { sum[i]=scanner.nextInt(); } //每个小朋友把自己分出去一半的糖果放入数组中 int[] yibansum=new int[renshu]; //老师补发的糖果数 int count=0; //执行语句 如果得到的糖果数量不一样的则执行下面的语句 while (true) { //假设每个小朋友的糖果是一样的 boolean result=false; for (int i = 0; i < renshu; i++) { //每个小朋友都分走一半的糖果 yibansum[i]=sum[i]/2; //给左边的小朋友 sum[i]-=yibansum[i]; } for (int i = 0; i < renshu; i++) { //因为围成的是一圈 //所以如果是第一位小朋友 则获得的是最后一名学生的一半糖果 if (i==0) { sum[i]+=yibansum[renshu-1]; } else { //否则就是获得左边小朋友的一半糖果 sum[i]+=yibansum[i-1]; } } for (int i = 0; i < renshu; i++) { //分走一半糖果后判断是否为奇数 if (sum[i]%2!=0) { //如果为奇数 则老师补发一颗糖果 sum[i]+=1; //补发次数增加1 count++; } } for (int i = 0; i < sum.length-1; i++) { //判断每个小朋友的糖果是否一样 if (sum[i]!=sum[i+1]) { //不一样则继续循环 result=true; } } //如果每个小朋友的糖果是一样的 则输出老师补发糖果的次数 if (result==false) { System.out.println(count); break; } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复