男:女 = 1.0002:1 (程序模拟结果)


所有跟贴·加跟贴·新语丝读书论坛

送交者: chen09 于 2009-06-10, 05:19:32:

回答: 求解两道概率题 由 heretic 于 2009-06-09, 22:03:54:

答案应该是1:1。
随机函数以及精度问题,有点偏差。

Children.java


import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class Children {

public static void main(String[] args) {

for (int i = 0; i < 1000; i++) {
new Children().proc(50, 130000);
}

}

public void proc(long birthCount, int familyCount) {

Random random = new Random(System.currentTimeMillis());

List<Family> listFamily = new LinkedList<Family>();

for (int i = 0; i < familyCount; i++) {
listFamily.add(new Family());
}

for (long i = 0; i < birthCount; i++) {

for (Iterator<Family> families = listFamily.iterator(); families.hasNext();) {
Family family = families.next();
family.birth(random.nextBoolean());
}
}

long longGirl = 0;
long longBoy = 0;

for (Iterator<Family> families = listFamily.iterator(); families.hasNext();) {
Family family = families.next();
longGirl += family.girl;
longBoy += family.boy;
}
System.out.println(longGirl + ":" + longBoy);

}

class Family {

public long boy;

public long girl;

public boolean isStop;

public Family() {

boy = 0;
girl = 0;
isStop = false;

}

public void birth(boolean isBoy) {

if (isStop)
return;
if (isBoy) {
boy++;
isStop = true;
} else {
girl++;
}
}
}

}




所有跟贴:


加跟贴

笔名: 密码: 注册笔名请按这里

标题:

内容: (BBCode使用说明