- 场景
我们可能会遇到这样的问题,班级总共有13个同学,周末进行大扫除,老师让每个同学带一些工具到班级,每个同学带的工具数量为:3,9,11,5,8,5,6,3,2,9,5,7,2 老师就需要将全班同学所有的工具进行平均分配给每一位同学,但是老师进行平均分配之后,发现还剩余了几个工具,这时我们就需要对剩余的工具随机分配这些同学 - 模拟效果:
- 代码实现:
import java.util.Random;
public class ArrayAverageTest {
public static void main(String[] args) {
int[] toolArray = new int[] {3, 9, 11, 5, 8, 5, 6, 3, 2, 9, 5, 7, 2};
int totalPerson = 13;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < toolArray.length; i ++) {
stringBuilder.append("," + toolArray[i]);
}
System.out.println("平均分配前每个同学工具的数量:" + stringBuilder.toString());
for (int i = 0; i < 20; i++) {
doAverage(toolArray, totalPerson);
}
}
public static void doAverage(int[] toolArray, int totalPerson) {
int[] intArray = new int[toolArray.length];
for (int i = 0; i < toolArray.length; i ++) {
intArray[i] = toolArray[i];
}
int total = 0;
for (int i = 0; i < toolArray.length; i++) {
total += toolArray[i];
}
int[] returnArr = new int[totalPerson];
for (int j = 0; j < totalPerson; j ++) {
returnArr[j] = total/totalPerson;
}
int returnTotal = 0;
for (int k = 0; k < totalPerson; k++) {
returnTotal += returnArr[k];
}
int duo = total - returnTotal;
int random = (int) (Math.random()*(duo + 1));
if (returnTotal < total) {
for (int m = 0; m < duo; m++) {
if (m == random) {
duo = duo + 1;
continue;
}
returnArr[m] = returnArr[m] + 1;
}
}
randomSort(returnArr);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < returnArr.length; i++) {
stringBuilder.append("," + returnArr[i]);
}
System.out.println("平均分配后每个同学工具的数量:" + stringBuilder.toString());
}
public static void randomSort(int[] arr) {
Random random = new Random();
int length = arr.length;
for (int i = length; i > 0; i--) {
int randomNext = random.nextInt(i);
int temp = arr[randomNext];
arr[randomNext] = arr[i - 1];
arr[i - 1] = temp;
}
}
}