全局文檔編號:1451java
一個朋友問了我這樣一個問題:十個隨機天然數,相加之和等於100,怎麼分紅和等於50的兩組?以爲挺有意思,就寫代碼玩了一下。算法
一個家庭有10個小孩,家裏的蘋果樹上結了100個蘋果,咱們須要將小孩隨意分紅2組(每組人數1-9),要求兩個組都分到50個蘋果數組
/** * @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()); } }