一道社会小题用Java实现一下。
一开始有100个人,每个人都有100元在每一轮都做如下的事情,每个人都必须拿出1元钱给除自己以外的其他人,给谁完全随机如果某个人在这一轮的钱数为0,那么他可以不给,但是可以接收发生很多轮之后,这100人的社会财富分布很均匀吗?
代码实现过程:
public static void main(String[] args) {
System.out.println("测试开始");
int n = 100;//人数
int t = 100000; //轮数
System.out.println("人数" + n);
System.out.println("轮数" + t);
experiment(n, t);
System.out.println("测试结束");
}
public static void experiment(int n, int t) {
//先给每个人100块
double[] wealth = new double[n];
Arrays.fill(wealth, 100);
//先假设每个人没有钱
boolean[] hasMoney = new boolean[n];
for (int i = 0; i < t; i++) {
Arrays.fill(hasMoney, false);
/*防止收钱和给钱在同一轮发生,
比如:第10个人本来这一轮没有钱了,他不需要给钱,
但是可能前九个人有人在这一轮给他钱了,如果没有先判断
是否有钱,那么这一轮第10人就要给钱了。
需要两个循环和hasMoney,第一个循环确定
这一轮有多少人有钱,并且记录有钱人。
*/
for (int j = 0; j < n; j++) {
//判断这一轮每个人是否有钱
if (wealth[j] > 0) {
hasMoney[j]=true;
}
}
/*
第二个循环判断这一轮有钱人给钱,
这一轮没有钱的接受钱,不用给钱。
*/
for (int j = 0; j < n; j++) {
//有钱才能加入游戏
//没钱接受别人
if (hasMoney[j]) {
int other = j;
do {
//随机给别人一块钱
other = (int) (Math.random() * n);
} while (other == j);
wealth[j]--;
wealth[other]++;
}
}
}
//财富值进行排序
Arrays.sort(wealth);
System.out.println("从贫穷到富有");
for (int i = 0; i < wealth.length; i++) {
System.out.print((int) wealth[i] + " ");
if (i % 10 == 9) {
System.out.println();
}
}