带权重的随机算法

news2024/11/13 12:48:35

假设有10名学生,其中5个男生,5个女生。

要求点到男生的概率为70%,女生的概率为30%。

给男生和女生设置权重,其中男生权重为7,女生权重为3。

public class Test02_case2 {
    public static void main(String[] args) throws IOException {
        //把文件中的学生全部读取出来放到集合中
        ArrayList<String> infoList = new ArrayList<>();
        //使用缓冲流读,因为可以一次读取一行
        BufferedReader br = new BufferedReader(new FileReader("name_10.txt"));
        String info;
        while ((info = br.readLine()) != null) {
            infoList.add(info);
        }
        ArrayList<Student> studentList = new ArrayList<>();
        for (String s : infoList) {
            String[] ss = s.split("-");
            Student student = new Student(ss[0], ss[1], Integer.parseInt(ss[2]),Double.parseDouble(ss[3]));
            studentList.add(student);
        }
        double sum = 0;
        for (Student student : studentList) {
            sum += student.getWeight();
        }
        double p1 = 5 * 7 / sum;
        double p2 = 5 * 3 / sum;
        double r = Math.random();
        int boyCount = 0;
        int girlCount = 0;
        for (int i = 0; i < 1000000; i++) {
            if (r <= 0.3) {
                girlCount++;
            } else {
                boyCount++;
            }
        }
        //统计概率
        double p3 = (double) boyCount / 1000000;
        double p4 = (double) girlCount / 1000000;
        System.out.println(p1);
        System.out.println(p2);

    }
}

 

public class Test05 {
    public static void main(String[] args) throws IOException {
        //把文件中的学生全部读取出来放到集合中
        ArrayList<String> infoList = new ArrayList<>();
        //使用缓冲流读,因为可以一次读取一行
        BufferedReader br = new BufferedReader(new FileReader("name_10_5.txt"));
        String info;
        while ((info = br.readLine()) != null) {
            infoList.add(info);
        }
        //把属性封装到对象中,并把所有对象放到集合中去
        ArrayList<Student> studentList = new ArrayList<>();
        for (String s : infoList) {
            String[] ss = s.split("-");
            Student student = new Student(ss[0], ss[1], Integer.parseInt(ss[2]), Double.parseDouble(ss[3]));
            studentList.add(student);
        }
        //计算权重总和
        double sum = 0;
        for (Student student : studentList) {
            sum += student.getWeight();
        }
        //概率
        double[] ww = new double[infoList.size()];
        for (int i = 0; i < ww.length; i++) {
            ww[i] = studentList.get(i).getWeight() / sum;
        }
        double[] proRange = new double[ww.length];
        for (int i = 0; i < proRange.length; i++) {
            if (i == 0) {
                proRange[i] = ww[i];
            } else {
                proRange[i] = proRange[i - 1] + ww[i];
            }
        }
        //随机点名
        double r = Math.random();
        System.out.println(r);
        int i = Arrays.binarySearch(proRange, r);
        int index = -(i + 1);
        Student student = studentList.get(index);
        System.out.println(student);

        //将点到的学生权重/2
        student.setWeight(student.getWeight() / 2);
        //
        System.out.println(student);
        //将减半后的权重重新写回
        BufferedWriter bw = new BufferedWriter(new FileWriter("name_10_5.txt"));
        for (Student student1 : studentList) {
            bw.write(student1.getName() + "-" + student1.getGender() + "-" + student1.getAge() + "-" + student1.getWeight());
            bw.newLine();
        }
        bw.close();

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Expected expression after operator

这个错误直译过来就是:运算符号后没有预期的表达式 这个错误通常出现在编程语言中&#xff0c;尤其是在编写C或C等类型语言的时候&#xff0c;它意味着在源代码中遇到了一个操作符&#xff08;比如 , -, *, /, , 等等&#xff09;&#xff0c;但在该操作符后面没有紧跟相应的表…

【最新华为OD机试E卷】最大利润-贪心的商人(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

Dolphinscheduler 3.2.0版本参数传递并使用switch任务进行判断

原文阅读&#xff1a;【巨人肩膀社区博客分享】3.2.0版本参数传递并使用switch任务进行判断 目标&#xff1a;根据日期判断执行哪项子任务 &#xfeff; 调度器版本&#xff1a;3.2.0 在这个版本中官方支持的参数传递任务类型有6中&#xff0c;分别为shell,sql,procedure,py…

网络压缩之网络剪枝(network pruning)

网络剪枝&#xff08;network pruning&#xff09;就是要把网络里面的一些参数剪掉。剪枝就是修剪的意思&#xff0c;把网络里面的一些参数剪掉。为什么可以把网络里面的一些参数剪 掉呢&#xff1f;这么大的网络里面有很多很多的参数&#xff0c;每一个参数不一定都有在做事。…

AcWing 897. 最长公共子序列

动态规划就是多见识应用题就完事儿了&#xff0c;也没有什么好说的。 讲解参考&#xff1a; 【E05 线性DP 最长公共子序列】 #include<iostream> #include<algorithm> #define N 1010 using namespace std; char a[N],b[N]; int n,m; int f[N][N]; int main(){…

欧拉 函数

互质&#xff1a; 互质是公约数只有1的两个整数&#xff0c;叫做互质整数。公约数只有1的两个自然数&#xff0c;叫做互质自然数&#xff0c;后者是前者特殊情况。 &#xff08;1和-1与所有整数互质&#xff0c;而且它们是唯一与0互质的整数&#xff09; 互质的判断方法&…

微信公众号文章导出工具 100%还原原文样式:wechat-article-exporter

wechat-article-exporter是一款微信公众号文章导出工具&#xff0c;能够100%还原原文样式&#xff0c;工具受 WeChat_Article 项目的启发所写&#xff0c;目前支持 搜索公众号和公众号内文章&#xff0c;导出文章为包含图片和样式文件的HTML格式&#xff08; (打包了图片和样式…

中仕公考:这样备考,你天生就是公务员!

根据上岸学员的反馈&#xff0c;小编发现了一些共通点&#xff0c;无论是在职备考还是全职备考&#xff0c;只要做到以下几点&#xff0c;不上岸那是不可能的! 1. 作息规律&#xff0c;早起不熬大夜。每天按时早起&#xff0c;挤出时间用来学习&#xff0c;晚上不熬夜学习到很…

Windows编程系列:PE文件结构

Windows编程系列&#xff1a;PE文件结构 PE文件结构 Portable Executable (PE)&#xff0c;可移植的可执行文件。在Windows平台下&#xff0c;所有的可执行文件&#xff08;包括.exe, .dll, .sys, .ocx, .com等&#xff09;均使用PE文件结构。这些使用了PE文件结构的可执行文…

HarmonyOS开发实战( Beta5版)应用性能工具CPU Profiler的使用规范

简介 本文档介绍应用性能分析工具CPU Profiler的使用方法&#xff0c;该工具为开发者提供性能采样分析手段&#xff0c;可在不插桩情况下获取调用栈上各层函数的执行时间&#xff0c;并展示在时间轴上。 开发者可通过该工具查看TS/JS代码及NAPI代码执行过程中的时序及耗时情况…

Web-gpt

AJAX AJAX&#xff08;Asynchronous JavaScript and XML&#xff0c;异步JavaScript和XML&#xff09;是一种用于创建动态网页应用的技术。它允许网页在不重新加载整个页面的情况下&#xff0c;异步地从服务器请求数据&#xff0c;并将这些数据更新到网页上。这提高了用户体验…

HarmonyOS开发实战( Beta5版)小程序场景性能优化开发指导

简介 小程序是一种轻量级的应用&#xff0c;它不需要下载、安装即可使用&#xff0c;用户可以通过扫描二维码或者搜索直接打开使用。小程序运行在特定的平台上&#xff0c;平台提供了小程序的运行环境&#xff08;运行容器&#xff09;和一些基础服务&#xff08;小程序API&am…

【C++ 第十八章】C++11 新增语法(2)

前情回顾&#xff1a; 【C11 新增语法&#xff08;1&#xff09;&#xff1a;1~6 点】 C11出现与历史、花括号统一初始化、initializer_list初始化列表、 auto、decltype、nullptr、STL的一些新变化 本文会使用到自己模拟实现的 string 和 list 类&#xff0c;为了更好的观察各…

笔记整理—内核!启动!—uboot部分(2)

上文中&#xff0c;我们说到了使用uboot去启动kernel支持的几种方式以及压缩kernel的几种形式&#xff0c;本章节将要接着内核的启动说起。 上一章我们对uImage格式进行了初步的说明&#xff0c;并说这样的格式已经被废弃&#xff0c;但是依然保留了相应的代码。boot_get_kerne…

MATLAB生成mif文件

MATLAB代码 % 参数设置 N 4096; % 数据点数量 t linspace(0, 2*pi, N); % 时间向量 width 12; % 位宽% 正弦波 sine_wave 2.5 * sin(t) 2.5; % 幅度在0到5之间% 三角波 tri_wave 5 - abs(mod(t/(2*pi)*4, 2) - 1);% 方波 square_wave 2.5 * (square(t) 1); % 将范围调…

Hive Tutorial For Beginners

Hive Tutorial For Beginners 一、Hive历史&#xff08;History of Hive&#xff09; Facebook 在面对日益增长的大数据时&#xff0c;选择了 Hadoop 作为解决方案。 但问题在于&#xff0c;许多用户并不熟悉 Java 或其他编程语言&#xff0c;这使得使用 Hadoop 的 MapReduc…

代码随想录——回文子串(Leetcode 647)

题目链接 我的题解&#xff08;双指针&#xff09; 思路&#xff1a; 当然&#xff0c;以下是对您提供的代码的解释&#xff1a; class Solution {public int countSubstrings(String s) {// 初始化回文子字符串的数量int count 0;// 遍历字符串的每个字符&#xff0c;使用…

无人机之电池篇

无人机电池作为无人机的重要组成部分&#xff0c;其性能、使用、保养及选择都至关重要。以下是对无人机电池的综合介绍&#xff1a; 一、无人机电池的基本参数 电池容量&#xff1a;电池容量直接影响无人机的续航能力。大容量电池&#xff0c;如5000mAh的电池&#xff0c;能提…

无人机道通布局的讲究详解!!!

一、通道分配与功能对应 基本通道&#xff1a;无人机遥控器通常至少包含四个基本通道&#xff0c;分别对应无人机的上下&#xff08;升降&#xff09;、左右&#xff08;副翼&#xff09;、前后&#xff08;俯仰&#xff09;和旋转&#xff08;方向舵&#xff09;控制。这些通…

关于报错 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“ 的可能原因

1. 絮絮叨叨 学习或工作中&#xff0c;如果需要从头建立日志打印体系&#xff0c;笔者通常直接照抄之前的博客&#xff1a;《Java maven工程配置slf4j》&#xff0c;直接粘贴、复制相关依赖除了上述博客提到的slf4j-api、logback-classic&#xff0c;也看到过slf4j-simple、lo…