全域檔案編號:1451
一、背景
一個朋友問了我這樣一個問題:十個隨機自然數,相加之和等于100,怎么分成和等于50的兩組?覺得挺有意思,就寫代碼玩了一下,
二、思路故事
一個家庭有10個小孩,家里的蘋果樹上結了100個蘋果,我們需要將小孩隨意分成2組(每組人數1-9),要求兩個組都分到50個蘋果
- 將10個小孩隨意分成兩組,A和B
- A組進行50次蘋果分配,隨機點一個小孩,分給他
- B組同理進行50次蘋果分配,隨機點一個小孩,分給他
- 分組完畢
三、Java代碼實作
/**
* @author wangyao
* @date 2020-5-21 15:57
* @description: 需求:十個亂數,相加等于100,怎么分成相加之和等于50的兩組
*/
public class AlgorithmTest {
public static void main(String[] args) {
/**
* 演算法實作描述
* 1、設定兩個陣列A,B,A陣列大小1-9隨機,假設a,另一個陣列10-a
* 2、針對A陣列進行50次回圈,每次任取一個陣列元素+1
* 3、針對B陣列進行50次回圈,每次任取一個陣列元素+1
* 4、列印分組結果
*/
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());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21254.html
標籤:其他
