我不是非酋之-天空概率

news/2024/9/19 0:36:48/ 标签: rust

最近入坑了dnf手游,染上了合天空,大黑蛋子一个,突发奇想,模拟下合天空概率,看看是否真的有20%。
梳理代码逻辑如下:

不考虑礼包和其他东西

条件:

  1. 合成概率20%,每次需要2个装扮和一个合成器
  2. 每次失败一件装扮和合成器会消耗
逻辑
1. 按每次都需要一件装扮和一个合成器(目前v区,价格是2.2w)
2. 先模拟一个勇士合成,循环800次取平均值
代码如下:
rust">use rand::Rng;
use std::time::Instant;const NUM_PLAYERS: usize = 8_000;
const SUCCESS_PROBABILITY: f64 = 0.20;
// 固定花费
const BASE_COST: f32 = 12.0; 
// 每次合成的花费
const COST_PER_TRIAL: f32 = 2.2; fn simulate_player(rng: &mut impl Rng) -> u32 {let mut total_amount = 0;let mut sub_equipments = 8;let mut count = 0;while sub_equipments > 0 {if rng.gen_bool(SUCCESS_PROBABILITY) {sub_equipments -= 1;}count += 1;}total_amount += count;total_amount
}fn main() {let start = Instant::now();let mut rng = rand::thread_rng();let mut total_success = 0;let mut total_cost: f32 = 0.0;for _ in 0..NUM_PLAYERS {let temp_count = simulate_player(&mut rng);total_cost += temp_count as f32 * COST_PER_TRIAL;total_success += temp_count;}let average_cost = total_cost / NUM_PLAYERS as f32;let success_time = total_success as f64 / NUM_PLAYERS as f64;println!("Average synthesis times: {:.2}",success_time);println!("Average Cost: {:.2}w, If you have a set of fashion, then all you need is {:.2}w",average_cost + BASE_COST, average_cost);println!("Elapsed Time: {:.2}", start.elapsed().as_secs_f32());
}

这里运行太慢了,暂时改成8000人结果

在这里插入图片描述我花了130w,这差这么多,继续加大数据,因为执行时间长,又改了下

rust">use rand::Rng;
use std::sync::{Arc, Mutex};
use std::thread;
use std::time::Instant;const NUM_PLAYERS: usize = 8_000_000;
const SUCCESS_PROBABILITY: f64 = 0.20;
// 固定花费
const BASE_COST: f32 = 12.0; 
// 每次合成的花费
const COST_PER_TRIAL: f32 = 2.2; 
// 线程数,可以根据你的 CPU 核心数进行调整
const NUM_THREADS: usize = 10;fn simulate_player(rng: &mut impl Rng) -> u32 {let mut total_amount = 0;let mut sub_equipments = 8;let mut count = 0;while sub_equipments > 0 {if rng.gen_bool(SUCCESS_PROBABILITY) {sub_equipments -= 1;}count += 1;}total_amount += count;total_amount
}fn main() {let start = Instant::now();let players_per_thread = NUM_PLAYERS / NUM_THREADS;let mut handles = vec![];let total_success = Arc::new(Mutex::new(0u32));let total_cost = Arc::new(Mutex::new(0.0f32));for _ in 0..NUM_THREADS {let total_success = Arc::clone(&total_success);let total_cost = Arc::clone(&total_cost);handles.push(thread::spawn(move || {let mut rng = rand::thread_rng();let mut thread_success = 0;let mut thread_cost = 0.0;for _ in 0..players_per_thread {let temp_count = simulate_player(&mut rng);thread_cost += temp_count as f32 * COST_PER_TRIAL;thread_success += temp_count;}let mut total_success = total_success.lock().unwrap();*total_success += thread_success;let mut total_cost = total_cost.lock().unwrap();*total_cost += thread_cost;}));}for handle in handles {handle.join().unwrap();}let total_success = Arc::try_unwrap(total_success).unwrap().into_inner().unwrap();let total_cost = Arc::try_unwrap(total_cost).unwrap().into_inner().unwrap();let average_cost = total_cost / NUM_PLAYERS as f32;let success_time = total_success as f64 / NUM_PLAYERS as f64;println!("Average combine time: {:.2}",success_time);println!("Average Cost: {:.2}w, If you have a set of fashion, then all you need is {:.2}w",average_cost + BASE_COST, average_cost);println!("Elapsed Time: {:.2}s", start.elapsed().as_secs_f32());
}

800w勇士模拟结果:
在这里插入图片描述
虽说不知道官方的概率算法是什么,但是应该差别很大,
恩,就这样算法问题,我不是非酋!


http://www.ppmy.cn/news/1519950.html

相关文章

改进YOLO的群养猪行为识别算法研究及部署(小程序-网站平台-pyqt)

概述 群养猪的运动信息和行为信息与其健康状况息息相关,但人工巡视费时费力,本实验提出采用行为识别算法于群养猪的养殖管理中,识别群养猪drink(饮水)、stand(站立)和lie(躺卧&#…

论tomcat线程池和spring封装的线程池

Tomcat 中的线程池是什么? 内部线程池:Tomcat 确实有一个内部的线程池,用于处理 HTTP 请求,通常是org.apache.tomcat.util.threads.ThreadPoolExecutor 类的实例。这个线程池专门用于处理进入的 HTTP 请求和发送响应。可以通过 T…

【C++】手动实现String类的封装(分文件编译)

实现了String类的大部分封装&#xff0c;采用分文件编译 //mystring.h #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> #include <cstring> using namespace std;class myString { private:char *str; //定义一个字符串int size; //记录字符串…

线性代数 第五讲:线性方程组_齐次线性方程组_非齐次线性方程组_公共解同解方程组_详解

线性方程组 文章目录 线性方程组1.齐次线性方程组的求解1.1 核心要义1.2 基础解系与线性无关的解向量的个数1.3 计算使用举例 2. 非齐次线性方程的求解2.1 非齐次线性方程解的判定2.2 非齐次线性方程解的结构2.3 计算使用举例 3.公共解与同解3.1 两个方程组的公共解3.2 同解方程…

鸿蒙界面开发(五):相对布局

相对布局RelativeContainer 相对布局的容器&#xff0c;支持容器内部的子元素设置相对位置关系&#xff0c;适用于界面复杂场景的情况&#xff0c;对多个子组件进行对齐和排列。子元素支持指定兄弟或父元素作为锚点&#xff0c;基于锚点做相对位置布局。 锚点&#xff1a;通过…

RK3568 Android 11 蓝牙BluetoothA2dpSink 获取用于生成频谱的PCM

Android 中的 A2DP Sink A2DP Sink 在 Android 系统中主要用于 接收 其他蓝牙设备&#xff08;如手机、平板、电脑等&#xff09;发送过来的 高质量的立体声音频。简单来说&#xff0c;它让你的 Android 设备可以充当一个 蓝牙音箱 或 耳机 的角色。 核心功能&#xff1a; 接…

vue3 监听

watch &#xff08;1&#xff09;监听ref 状态的变化 const num ref(1) watch(num,(newValue,oldValue)>{console.log(newValue,oldValue);//2,1 }) setTimeout(()>{num.value },500)&#xff08;2&#xff09;computed const num ref(1); const double computed((…

惠中科技光伏清洗剂:绿色清洁,引领光伏行业新潮流

在当今全球能源转型的大潮中&#xff0c;光伏产业作为绿色能源的重要组成部分&#xff0c;正以前所未有的速度蓬勃发展。然而&#xff0c;随着光伏板在户外环境的长时间暴露&#xff0c;其表面不可避免地会积累灰尘、鸟粪、油污等污染物&#xff0c;严重影响光伏板的透光率和发…

Gorm--Scan

在 Gorm 中&#xff0c;Scan 是一个用于将查询结果映射到自定义结构体或变量的函数。与 Find 或 First 不同&#xff0c;Scan 允许你将查询结果存储到与数据库模型不完全匹配的结构体中。它特别适合用于自定义查询结果或联合查询的场景。 type Result struct {Name stringEma…

#单片机基础 笔记二

SPI中断 1.SPI总线协议 1.1协议介绍 SPI接口是Motorola &#xff08;motorola | Smartphones, Accessories & Smart Home Devices&#xff09;首先提出的全双工三线/四线同步串行外围接口采用主从模式&#xff08;Master Slave&#xff09;架构。 时钟由Master控制&#xf…

ELK学习笔记——如何给Kibana新增用户和角色

Kibana新增用户和角色 首先用超管账号登录上Kibana&#xff0c;按照下面步骤操作 1、创建角色 按图操作 2、创建用户 按图操作 3、给用户分配角色 至此&#xff0c;角色和用户绑定成功&#xff1b; 最后&#xff0c;可以退出管理员账号&#xff0c;登录这个新…

github私有仓库通过action部署hexo到公开仓库

github私有仓库通过action部署hexo到公开仓库 有一段时间一直将博客md文件直接放到公开仓库然后通过工作流action创建一个gh-page分支&#xff0c;来实现部署 但是这样做有一个问题&#xff0c;如果你的源文件&#xff0c;或者配置文件中有涉及变量&#xff0c;或者密钥key&a…

Linux-vim

文章目录 vi和vimvim的基本概念vim的基本操作vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作更改跳至指定的行 vim末行模式命令集列出行号跳到文件中的某一行查找字符保存文件推出vim vi和vim vi/vim的区别简单点来说&#xff0c;…

Linux C 内核编程 /proc 编程例子

直接上代码 proc_demo.c内核版本&#xff1a; 5.4.0-150-generic #include <linux/module.h> #include <linux/sched.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <linux/uaccess.h> #include <linux/slab.h>s…

threading.local的使用

python中的threading.local对象 在Python中&#xff0c;使用threading.local对象的意义在于为每个线程提供了一种安全地存储和访问线程局部变量的方式。这种机制对于多线程编程特别有用&#xff0c;因为它可以帮助开发者避免一些常见的多线程编程问题&#xff0c;如数据竞争、…

技术周刊 | Rspack 1.0、v0 支持 Vue、2024 年度编程语言排行榜、Ideogram 2.0、从 0 实现一个 React

大家好&#xff0c;我是童欧巴&#xff0c;欢迎来到第 126 期技术周刊。 资讯 Rspack 1.0 Rspack 1.0 正式发布&#xff0c;作为一款基于 Rust 的高性能 JavaScript 打包工具&#xff0c;它兼容 webpack API 和生态&#xff0c;提供了显著提升的构建性能。1.0 版本在性能、兼…

第三章:实时流数据处理与分析

目录 3.1 流处理框架深入解析与实战 Flink与Kafka Streams的性能对比&#xff1a;事件驱动架构的代码实现 1. Apache Flink&#xff1a;流处理的“性能怪兽” 2. Kafka Streams&#xff1a;轻量级、低延迟的流式处理框架 实时异常检测与报警系统&#xff1a;结合Flink CEP…

【Transformer】基本概述

文章目录 提出背景核心思想—注意力机制流程解析参考资料 提出背景 在Transformer模型出现之前&#xff0c;循环神经网络&#xff08;RNN&#xff09;及其变体&#xff0c;如长短期记忆网络&#xff08;LSTM&#xff09;和门控循环单元&#xff08;GRU&#xff09;&#xff0c;…

版本控制工具git

版本控制工具 git 数据库 > 有代码历史版本 > 仓库 每个文件都是不同的历史版本&#xff0c;以便恢复 集中式版本控制系统 例如&#xff1a;SVN 缺陷&#xff1a; 1.依赖于中心服务器 分布式的版本管理系统 只有程序员用 git 只有需要在同步代码的时候需要联网 程…

Java笔试面试题AI答之面向对象(9)

文章目录 49. 简述Java继承时&#xff0c;类的执行顺序是什么&#xff1f;一、类的静态成员初始化顺序二、对象的初始化顺序三、总结 50. 举例说明什么情况下会更倾向于使用抽象类而不是接口&#xff1f;1. 当需要定义和实现部分通用行为时2. 当需要访问修饰符或方法修饰符时3.…