十個隨機數,相加之和等於100,怎麼分紅相加之和等於50的兩組

全局文檔編號:1451java

1、背景

一個朋友問了我這樣一個問題:十個隨機天然數,相加之和等於100,怎麼分紅和等於50的兩組?以爲挺有意思,就寫代碼玩了一下。算法

2、思路故事

一個家庭有10個小孩,家裏的蘋果樹上結了100個蘋果,咱們須要將小孩隨意分紅2組(每組人數1-9),要求兩個組都分到50個蘋果數組

  1. 將10個小孩隨意分紅兩組,A和B
  2. A組進行50次蘋果分配,隨機點一個小孩,分給他
  3. B組同理進行50次蘋果分配,隨機點一個小孩,分給他
  4. 分組完畢

3、Java代碼實現

/**
* @author wangyao
* @date 2020-5-21 15:57
* @description: 需求:十個隨機數,相加等於100,怎麼分紅相加之和等於50的兩組
*/
public class AlgorithmTest {
    public static void main(String[] args) {
        /**
         * 算法實現描述
         * 一、設置兩個數組A,B,A數組大小1-9隨機,假設a,另外一個數組10-a
         * 二、針對A數組進行50次循環,每次任取一個數組元素+1
         * 三、針對B數組進行50次循環,每次任取一個數組元素+1
         * 四、打印分組結果
         */
        System.out.println("要求:十個隨機數,相加等於100,我要分紅相加之和等於50的兩組...");
        System.out.println();
        System.out.println("分完啦!");
        Random r = new Random();
        int aLength = 0;
        while (aLength == 0) {
            aLength = r.nextInt(10);
        }
        int[] a = new int[aLength];
        int[] b = new int[10-aLength];
        for (int i = 0; i < 50; i++) {
            int luckyGuyInA = r.nextInt(aLength);
            a[luckyGuyInA]++;
            
            int luckyGuyInB = r.nextInt(10 - aLength);
            b[luckyGuyInB]++;
        }
        
        
        System.out.print("A組數據:");
        int sumA = 0,sumB = 0;
        StringBuilder sb = new StringBuilder();
        for (int i = 0 ; i < aLength; i++) {
            sumA += a[i];
            System.out.print(a[i] + "  ");
            sb.append(a[i] + "  ");
        }
        System.out.println();
        System.out.println("和:" + sumA);
        
        System.out.print("B組數據:");
        for (int i = 0 ; i < 10-aLength; i++) {
            sumB += b[i];
            System.out.print(b[i] + "  ");
            sb.append(b[i] + "  ");
        }
        System.out.println();
        System.out.println("和:" + sumB);
    
        System.out.println("10個隨機數分別是:" + sb.toString());
    }
}
相關文章
相關標籤/搜索