欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 练习:随机点名器5

练习:随机点名器5

2024/10/24 7:23:08 来源:https://blog.csdn.net/2301_80329236/article/details/140365473  浏览:    关键词:练习:随机点名器5

题目:

TxT文件中事先准备好一些学生信息,每个学生的信息独占一行。,要求1:每次被点到的学生,再次被点到的概率在原先的基础上降低一半。

举例:80个学生,点名5次,每次都点到小A,概率变化情况如下:,第一次每人概率:1.25%。,第二次小A概率:0.625%。,其他学生概率:1.2579%,第三次小A概率:0.3125%。,其他学生概率:1.261867%,第四次小A概率:0.15625%。,其他学生概率:1.2638449%,第五次小A概率:0.078125%。,其他学生概率:1.26483386%,

提示:本题的核心就是带权重的随机

代码:

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;public class Demo07 {public static void main(String[] args) throws IOException {BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\javaSE\\java\\src\\IO\\Text\\b.txt"));String len;ArrayList<Students> list = new ArrayList<>();while ((len=bufferedReader.readLine())!=null) {String[] split = len.split("-");Students students = new Students(split[0],split[1],Integer.parseInt(split[2]),Double.parseDouble(split[3]));list.add(students);}bufferedReader.close();//计算权重的总和double weight=0;for (Students students : list) {weight=weight+students.getNumber();}System.out.println(weight);//计算出每个人的权重double[] doubles = new double[list.size()];for (Students students : list) {for (int i1 = 0; i1 < doubles.length; i1++) {doubles[i1]=students.getNumber()/weight;}}//计算每一人的权重占比for (int i1 = 1; i1 < doubles.length; i1++) {doubles[i1]=doubles[i1]+doubles[i1-1];}double random = Math.random();int i1 = -Arrays.binarySearch(doubles, random)-1;Students students = list.get(i1);//随机到的数//减少概率double v = students.getNumber() / 2;students.setNumber(v);BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\javaSE\\java\\src\\IO\\Text\\b.txt"));for (Students students1 : list) {bufferedWriter.write(students1.toString());bufferedWriter.newLine();}bufferedWriter.close();}
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com