本帖最后由 Bobby1109 于 2016-2-2 00:32 编辑
思路:总的来讲,先列出所有可能情况,逐一对每一种情况检查,删除不符合要求的情况。最后用符合要求情况数量除以所有可能情况数量得到概率。
具体如下:
1. 事件模型:
创建一个元素类型为Integer的List集合aList。并利用for循环为每个元素赋值。
将参与抽奖的每个人视为集合中的每个元素。一个人抽中奖可理解为元素的值和元素的索引相同。
2. 列出所有可能情况:
在while循环中利用Collections.shuffle(aList) 对元素进行排列,每排一次就把aList中的元素转为String elemStr(元素间空格分开),并把elemStr存入TreeSet resultSet中。当resultSet的大小为抽奖人数P的阶乘时,循环停止。至此,resultSet中的元素为所有可能情况。
3. 删除不符合要求的情况:
遍历resultSet,如果某元素第i位上的数值为i,表示该人抽到自己的名字,则删除该元素。即删除抽到自己的情况。
4. 输出结果:
double result = resultList.size()*1.0/P! * 100;
将 result 转为字符串后截取小数点后两位的字符串作为子字符串并加上% 输出至控制台即可。
输出结果格式图片:
|