C#实现拼手气红包算法
作者:天马3798 发布时间:2023-07-27 13:52:18
标签:C#,拼手气,红包
本文实例为大家分享了C#实现拼手气红包算法的具体代码,供大家参考,具体内容如下
一、方案1:即开即中,考虑机会均等,减少金额差较大的几率
可以每次点击时候,随机产生
static double[] GetRandomMoney(double money, int n)
{
double[] array = new double[n];
RedPackage red = new RedPackage() { money = money, count = n };
for (int i = 0; i < n; i++)
{
array[i] = GetRandomMoney(red);
}
return array;
}
/// <summary>
/// 即开即中,考虑机会均等,减少金额差较大的几率
/// 随机产生,额度在0.01和剩余平均值*2之间
/// </summary>
/// <returns></returns>
static double GetRandomMoney(RedPackage redPackage)
{
//如果最后一个,返回全部
if (redPackage.count == 1)
{
redPackage.count--;
return Math.Round(redPackage.money * 100) / 100.00;
}
//随机生成
Random ran = new Random();
double min = 0.01;
double max = redPackage.money / redPackage.count * 2;
double money = ran.NextDouble() * max;
money = money <= min ? 0.01 : money;
money = Convert.ToInt32(money * 100) / 100.00;
redPackage.count--;
redPackage.money -= money;
return money;
}
public class RedPackage
{
/// <summary>
/// 剩余红包数量
/// </summary>
public int count;
/// <summary>
/// 剩余金额
/// </summary>
public double money;
}
生成5组随机结果如下:
二、方案2: 一次性拆分红包,不考虑机会平等性
/// <summary>
/// 一次性拆分红包,不考虑机会平等性
/// 最小单位1 分
/// </summary>
static double[] DiviedOne(double money, int n)
{
double min = 0.01;
if (money < min)
throw new Exception("拆分金额不能小于0.01 ");
int fen = (int)money * 100;
//创建n 个红包数组
int[] array = new int[n];
//每个红包先填充1分
Array.Fill(array, 1);
fen -= n;
//第二步,随机分配
Random ran = new Random();
int i = 0;
while (fen > 1)
{
int f = ran.Next(fen);
array[i % n] += f;
fen -= f;
i++;
}
//最后一分钱,补到第一个数组
if (fen > 0)
{
array[0] += fen;
}
return array.Select(q => q / 100.0).ToArray();
}
生成5组随机结果如下:
来源:https://blog.csdn.net/u011127019/article/details/108531518


猜你喜欢
- 本文实例讲述了Java实现读取及生成Excel文件的方法。分享给大家供大家参考,具体如下:一、读取Excel文件需要先下载poi-3.0.1
- 首先,查到java里文件重命名的方法为:renameTo();我将180张图片放在d:\\backup下,用下面的程序进行重命名:publi
- 一般,我们的web应用都是只有在用户登录之后才允许操作的,也就是说我们不允许非登录认证的用户直接访问某些页面或功能菜单项。我还记得很久以前我
- 本文实例讲述了Java递归算法。分享给大家供大家参考,具体如下:1.实现1到100的和,用递归实现public class Recursio
- 一、why(为什么要用Hibernate缓存?)Hibernate是一个持久层框架,经常访问物理数据库。为了降低应用程序对物理数据源访问的频
- SqlMapConfig.xml的约束,也就是Mybatis主配置文件的约束<?xml version="1.0"
- 本文实例为大家分享了Java实现图书借阅系统的具体代码,供大家参考,具体内容如下为图书阅览室开发一个图书借阅系统,最多可存50本图书,实现图
- 方式1:1. 明确 Spark中Job 与 Streaming中 Job 的区别1.1 Spark Core一个 RDD DAG Graph
- 如下图:点击加号添加键值对:archetypeCataloginternal补充知识:idea+maven+tomcat报404我的解决办法
- 本文实例为大家分享了Android实现界面跳转的具体代码,供大家参考,具体内容如下布局<?xml version="1.0&
- 本文实例为大家分享了使用ContentProvider实现查看系统短信功能的具体代码,供大家参考,具体内容如下activity_main.x
- 目录一 、递归算法简介二 、Fibonacci数列和阶乘1、 Fibonacci数列2、阶乘三 、汉诺塔问题 四 、排列组合1、输
- 1.简单介绍一下NDK和JNINDK:NDK是Native Development Kit的缩写,是Google提供的一套工具集
- 随着C语言的学习慢慢结束,博主也要开始学习一门新语言了,那就是java。所以博主将会开启一个新的关于java的专栏,所以想要慢慢和我一起学习
- 上一篇写了一下装箱拆箱的定义和IL分析,这一篇我们看下使用泛型和不使用泛型引发装箱拆箱的情况1.使用非泛型集合时引发的装箱和拆箱操作 看下面
- 方法引用和构造器引用了解了 Lambda 表达式有一段时间了,但是都没有怎么练习,一直停留在最低层次的了解程度,这对于追求技术进步的人来说确
- Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "hello";,另一种就是使用new
- 参考: https://gist.github.com/laispace/666dd7b27e9116faece6前提是你本地有 socks
- 前言:好久没有写博客,最近一年感觉真是好忙,各种做不完的工作。相信很多上班族都会有这种感觉。最近对NFC进行写卡操作,需要计算一个校验位。一
- 图的实际应用在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。地图:我