JAVA 一个桶里面有白球. 黑球各 100 个
问题描述
一个桶里面有白球. 黑球各 100 个,现在按下述的规则取球:
i . 每次从桶里面拿出来两个球;
ii. 如果取出的是两个同色的球,就再放入一个黑球;
iii. 如果取出的是两个异色的球,就再放入一个白球;
问:最后桶里面只剩下一个黑球的概率是多少?
答案
1.每次操作都会减少一球,所以最后剩下黑球或者白球
2.由于白球每次操作要么不变,要么成对减少,所以最后不可能剩余一个白球,那么必然是剩余黑球了
代码
public class Test {/*** 运算逻辑:* 1.将前100个数指定为白球,后100个指定为黑球,放入set里,然后再统一放入all set里* 2.随机取两个,执行取球放球的逻辑* 3.将剩余的黑白球重新排序,再循环继续之前的取球操作* 4.黑球或者白球有一个取尽的时候结束运行* @param args*/public static void main(String[] args) {//白球 0~99Set<Integer> white = new HashSet<>();for(int i=0;i<100;i++){white.add(i);}//黑球 100~199Set<Integer> black = new HashSet<>();for(int j=100;j<200;j++){black.add(j);}//所有的球 0~199Set<Integer> all = new HashSet<>();all.addAll(white);all.addAll(black);Random random = new Random();//新增的黑球(大于199就行,防止set插入值重复)int blackCount = 200;//遍历次数int count = 1;//黑白球比较数int compareNum = 100;while (true){int first = random.nextInt(all.size());int second = random.nextInt(all.size());if(first == second) continue;//都是白球if(first<compareNum && second<compareNum){white.remove(first);white.remove(second);all.remove(first);all.remove(second);black.add(blackCount);all.add(blackCount);}//都是黑球if(first>=compareNum && second>=compareNum){all.remove(second);black.remove(second);}//一白一黑if((first<compareNum && second>=compareNum)){all.remove(second);black.remove(second);}//一黑一白if((first>=compareNum && second<compareNum)){all.remove(first);black.remove(first);}//黑球或者白球取尽时跳出循环if(black.size()==0 || white.size()==0){break;}//set重排Set<Integer> newWhite = new HashSet<>();for(int ii=0;ii<white.size();ii++){newWhite.add(ii);}white = newWhite;Set<Integer> newBlack = new HashSet<>();for(int jj=0;jj<black.size();jj++){newBlack.add(white.size() + jj);}black = newBlack;compareNum = white.size();all.clear();all.addAll(white);all.addAll(black);System.out.println("第"+count+"次,白球剩余"+white.size()+"个,黑球剩余"+black.size()+"个。");count++;}System.out.println("第"+count+"次,白球剩余"+white.size()+"个,黑球剩余"+black.size()+"个。");}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
