• 蓝桥杯 历届试题 PREV-32 分糖果


    历届试题 分糖果  
    时间限制:1.0s   内存限制:256.0MB
    问题描述
      有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:

      每个小朋友都把自己的糖果分一半给左手边的孩子。

      一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。

      反复进行这个游戏,直到所有小朋友的糖果数都相同为止。

      你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
    输入格式
      程序首先读入一个整数N(2<N<100),表示小朋友的人数。
      接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
    输出格式
      要求程序输出一个整数,表示老师需要补发的糖果数。
    样例输入
    3
    2 2 4
    样例输出
    4
     
    示例代码:
     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStreamReader;
     4 
     5 public class Main {
     6     private static int m;
     7     private static int[] sweetsNum;
     8     private static int addNum;     //增加的糖果数
     9     public static void main(String[] args) throws NumberFormatException, IOException {
    10         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    11         m = Integer.parseInt(br.readLine());
    12         
    13         sweetsNum = new int[m];
    14         String[] str = br.readLine().split(" ");
    15         for(int i = 0; i < m; i++){
    16             sweetsNum[i] = Integer.parseInt(str[i]);
    17         }
    18         
    19         candy(m,sweetsNum);
    20         
    21         System.out.println(addNum);
    22     }
    23     
    24     /**
    25      * 分糖果
    26      * @param m    学生个数
    27      * @param sweetsNum  每个学生的糖果数
    28      */
    29     private static void candy(int m, int[] sweetsNum) {
    30         while(true){
    31             if(equal(sweetsNum)){
    32                 return;
    33             }else{
    34                 //每个小朋友都把自己的糖果分一半给左手边的孩子
    35                 int temp = sweetsNum[0];
    36                 for(int i = 0; i < sweetsNum.length-1; i++){
    37                     sweetsNum[i] = sweetsNum[i+1]/2 + sweetsNum[i]/2; 
    38                 }
    39                 sweetsNum[sweetsNum.length-1] = temp/2 + sweetsNum[sweetsNum.length-1]/2;
    40                 
    41                 //老师给奇糖果数的孩子补糖果
    42                 for(int i = 0; i < sweetsNum.length; i++){
    43                     if(sweetsNum[i]%2 != 0){
    44                         addNum++;            //记录补的糖果数的数目
    45                         sweetsNum[i]++;
    46                     }
    47                 }
    48             }
    49         }
    50     }
    51     
    52     /**
    53      * 判断所有学生手中的糖果数是否相等
    54      * @param sweetsNum  每个学生的糖果数
    55      * @return 相等返回true,否则返回false
    56      */
    57     private static boolean equal(int[] sweetsNum) {
    58         int n = 0;
    59         for(int i = 1; i < sweetsNum.length; i++){
    60             if(sweetsNum[i] == sweetsNum[0]){
    61                 n++;
    62             }
    63         }
    64         if(n == sweetsNum.length-1){
    65             return true;
    66         }
    67         return false;
    68     }
    69 }
  • 相关阅读:
    linux 系统账户 和 普通账户 的区别
    supervisor 相关命令
    linux 动态链接库查找方法;查找动态链接库位置; LIBRARY_PATH 和 LD_LIBRARY_PATH 的区别;LD_LIBRARY_PATH and LD_RUN_PATH的区别;MACOS 下查看动态链接库方法
    Ubuntu 一键伪装成Win 10,Kali Linux 2019 kali-undercover软件嫁接;Ubuntu 1804 使用 kali-undercover;
    C 实战练习题目30 – 回文数
    C 实战练习题目29
    C 实战练习题目28
    C 实战练习题目27
    C 实战练习题目26 -递归法求阶乘
    C 实战练习题目25
  • 原文地址:https://www.cnblogs.com/cao-lei/p/6628317.html
Copyright © 2020-2023  润新知