C#實現(xiàn)拼手氣紅包算法
更新時間:2020年09月13日 08:43:43 作者:天馬3798
這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)拼手氣紅包算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C#實現(xiàn)拼手氣紅包算法的具體代碼,供大家參考,具體內(nèi)容如下
一、方案1:即開即中,考慮機會均等,減少金額差較大的幾率
可以每次點擊時候,隨機產(chǎn)生
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>
/// 即開即中,考慮機會均等,減少金額差較大的幾率
/// 隨機產(chǎn)生,額度在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>
/// 剩余紅包數(shù)量
/// </summary>
public int count;
/// <summary>
/// 剩余金額
/// </summary>
public double money;
}
生成5組隨機結(jié)果如下:

二、方案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;
//創(chuàng)建n 個紅包數(shù)組
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++;
}
//最后一分錢,補到第一個數(shù)組
if (fen > 0)
{
array[0] += fen;
}
return array.Select(q => q / 100.0).ToArray();
}
生成5組隨機結(jié)果如下:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用C#實現(xiàn)獲取當(dāng)前設(shè)備硬件信息
這篇文章主要為大家詳細(xì)介紹了如何利用C#實現(xiàn)獲取當(dāng)前設(shè)備硬件信息的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-03-03
C/C++與Java各數(shù)據(jù)類型所占字節(jié)數(shù)的詳細(xì)比較
本篇文章主要是對C/C++與Java各數(shù)據(jù)類型所占字節(jié)數(shù)進(jìn)行了詳細(xì)的對比。需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
C#中的Task.WaitAll和Task.WaitAny方法介紹
這篇文章介紹了C#中的Task.WaitAll和Task.WaitAny方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04

