抽奖应该都不陌生,常见的双色球、摇号等。本文以简单的根据指定的概率选择奖项为例,简单介绍一下。
首先,看一下大家常见的简单的抽奖。
比如,有两项:中奖和不中奖,中奖概率0.3,不中奖概率0.7。一般都是这样实现的。
public int PrabalityRandom()
{
Random random = new Random();
if (random.Next(1000) > 700)
{
return 1;//表示中奖
}
else
{
return 0;//表示不中奖
}
}
以此为基础,那么当有N个奖项,每项都有指定的中奖概率。如下实现,
有五项,
奖项1,概率:0.01;
奖项2,概率:0.04;
奖项3,概率:0.02;
奖项4,概率:0.03;
不中奖5,概率:0.9;
实现方法:
按概率从小打到排序,然后使用累计概率-当前概率+前一项累计概率。
奖项1,概率:0.01;累积概率:0.01
奖项3,概率:0.02;累积概率:0.03
奖项4,概率:0.03;累积概率:0.06
奖项2,概率:0.04;累积概率:0.1
不中奖5,概率:0.9;累积概率:1.0。
程序:
class Program
{
static void Main(string[] args)
{
List<KeyValuePair<long, double>> elements = new List<KeyValuePair<long, double>>();
elements.Add(new KeyValuePair<long, double>(1, 0.01));
elements.Add(new KeyValuePair<long, double>(2, 0.04));
elements.Add(new KeyValuePair<long, double>(3, 0.02));
elements.Add(new KeyValuePair<long, double>(4, 0.03));
elements.Add(new KeyValuePair<long, double>(5, 0.9));
//概率计算
double allRate = 0;
foreach (var item in elements)
{
allRate += item.Value;
}
if (allRate != 1)
{
Console.WriteLine("奖品概率设置错误!");
Console.WriteLine(allRate);
Console.ReadLine();
return;
}
Random random = new Random();
long selectedElement = 0;
while (true)
{
//连抽20次已查看中奖分布情况,5为不中奖
for (int n = 0; n < 20; n++)
{
double diceRoll = random.NextDouble();
double cumulative = 0.0;
for (int i = 0; i < elements.Count; i++)
{
cumulative += elements[i].Value;
if (diceRoll <= cumulative)
{
selectedElement = elements[i].Key;
break;
}
}
Console.WriteLine(selectedElement);
}
string read = Console.ReadLine();
if (read=="e")
{
break;
}
}
Console.WriteLine(selectedElement);
Console.ReadLine();
}
}
看一组数据:
其实这样的算法,是达不到真正中奖的要求的,原因在与随机数的生成,他的概率是不知道的。这样算出的结果不是原本设定的概率。当然这需要结合概率的相关知识才能实现真正的根据概率得出的中奖结果。待续...
代码:http://download.csdn.net/detail/yysyangyangyangshan/6321281
分享到:
相关推荐
在本项目"C#实现抽奖程序(二)"中,我们主要关注的是如何通过C#编程语言构建一个功能完善的抽奖系统。这个升级版本的程序引入了几个关键改进,以提升用户体验和系统稳定性。以下是对这些改进的详细解释: 1. **已...
该资源是一个基于C#语言开发的Windows Forms应用程序,用于实现抽奖功能,并且数据库管理部分采用了Microsoft Access。在本文中,我们将深入探讨C# Winform抽奖程序与Access数据库结合使用的关键技术点。 首先,C#...
在C#中,`System.Random` 类用于生成一系列不重复的随机整数,这正是实现抽奖机制的基础。 源代码中可能会包含以下几个主要部分: 1. **类定义**:彩票抽奖机程序可能包含一个或多个类,如`LotteryMachine`,用于...
抽奖程序 包含:PPT抽奖代码原理,C#抽奖代码。 大小:8.2M 技术:线程刷新UI,打开音乐, 显示图片,显示GIF,自定义控件,抽奖算法实现。 说明: 1.此算法能实现相对公平的概率,每1000次抽奖测试,分布相对平均,...
1、C#编写的用于公司年会抽奖的程序,可满足基本的抽奖需求; 2、目前设置了一等奖、二等奖、三等奖、幸运奖; 3、支持从txt文件读取人员名单; 4、关闭程序时弹出确认窗口; 5、有背景音乐、抽奖音乐,可根据需求...
【C# WinForm 抽奖程序】是一款基于C#编程语言和Windows Forms(WinForm)框架开发的应用程序,主要用于实现各种抽奖活动的功能。这个程序允许用户根据需求自定义界面布局,包括标题、内容等元素,提供了高度的定制...
在本项目中,我们主要探讨的是一个基于C#编写的简单抽奖程序,它适用于各种活动或竞赛中的随机抽签环节。这个程序使用了Visual Studio 2008进行开发,展示了C#语言在实际应用中的基本功能和特性,如文件操作、音频...
《C#实现抽奖程序详解》 在众多编程语言中,C#以其强大的功能和易用性,成为开发各种应用程序的热门选择。在这个案例中,我们关注的是一个特别的应用——C#编写的抽奖程序,它被广泛应用于公司年会、活动庆典等各种...
在C#中,抽奖程序的关键实现涉及以下几个知识点: 1. **随机数生成**:抽奖的核心在于生成随机结果。C#的`System.Random`类提供了生成随机整数或浮点数的功能。通过设定一个范围,我们可以确保抽取的号码或名字是在...
【C# 抽奖程序源码】是一种基于C#编程语言开发的应用,它利用多线程技术实现了一个具有随机性的抽奖系统。在这个程序中,开发者可能关注的重点在于如何设计一个公平且高效的抽奖流程,以及如何利用C#的多线程特性来...
【C# 抽奖程序详解】 C# 是一种面向对象的编程语言,广泛应用于Windows桌面应用开发、游戏制作以及Web应用程序等。在这个“C#做的抽奖程序”中,我们可以了解到如何利用C#来构建一个简单而实用的抽奖系统。下面我们...
本抽奖程序充分利用了C#的特性,为用户提供了一个直观易用的图形界面,通过交互式的按钮和显示控件,实现抽奖操作。 数据库集成是这个程序的一大亮点。抽奖活动的设置,如奖项名称、中奖概率、参与人数等,都可以...
【C#简单的抽奖程序】是一个基于C#编程语言开发的应用软件,主要功能是实现一个具有等级划分的抽奖系统。这个程序允许用户自定义奖项等级,包括一等奖、二等奖、三等奖等,每个等级的奖项数量也可以根据实际需求进行...
在本项目中,我们讨论的是一个使用C#编程语言实现的简单抽奖程序。这个程序的主要目的是为用户提供一个交互式的抽奖体验,包含多个等级的奖项。接下来,我们将详细讲解C#语言的基本概念、抽奖程序的设计思路以及如何...
【C# WinForm窗体转盘抽奖】是一个基于C#编程语言和Windows Forms(WinForm)框架实现的简单抽奖程序。这个程序的核心功能是通过模拟转盘转动效果,结合音频播放,来创建一个吸引人的抽奖体验。对于初学者来说,这是...
增加Readme PPT 包含算法原理,使用说明,配置说明, 比较公平的抽奖算法,一定程度克服了Random函数...PS:需要自己实现已中奖名单序列化,载入名单后进行去除,就可以避免断电影响,作者比较懒,不再进行相关开发了。
【C#年终抽奖程序例子】是一个使用C#编程语言开发的应用程序,主要目的是为了实现一个公司的年终抽奖功能。这个程序的特色在于它允许通过Excel文件导入参与者名单,并根据设定的抽奖规则来抽取幸运儿。接下来,我们...
在这个“C#超强抽奖程序”中,开发者利用了C#的强大功能来实现了一个可配置且自定义的抽奖系统。这个程序不仅能够进行基本的抽奖操作,而且具备了在多设备间同步结果显示的能力,使其在各种活动或晚会中能发挥重要...
本篇将详细讲解基于C#实现的“抽奖程序”这一知识点,以及如何利用C#进行这类随机事件模拟的编程实践。 首先,"C#抽奖程序源码共享"这个标题表明我们讨论的是一个用C#编写的程序,它的主要功能是进行抽奖活动。抽奖...
2. **文件操作**:抽奖程序需要读取文本文件中的数据,这涉及到C#的文件操作API。例如,`System.IO`命名空间下的`StreamReader`或`File`类可以用来读取文本文件内容。开发者可能使用`File.ReadAllLines()`方法一次性...