private
void
button1_Click(
object
sender, EventArgs e)
{
Dictionary<
string
,
int
> dic =
new
Dictionary<
string
,
int
>();
dic.Add(
"苹果"
, 30);
dic.Add(
"梨子"
, 15);
dic.Add(
"南瓜"
, 60);
int
total = 0;
foreach
(KeyValuePair<
string
,
int
> kvp
in
dic)
{
total += kvp.Value;
}
Random rnd =
new
Random();
int
rndNum = rnd.Next(1, total + 1);
int
currentTotal = 0;
foreach
(KeyValuePair<
string
,
int
> kvp
in
dic)
{
currentTotal += kvp.Value;
if
(rndNum <= currentTotal)
{
MessageBox.Show(rndNum.ToString());
MessageBox.Show(
"此次抽中的是:"
+ kvp.Key);
break
;
}
}
}
public
static
void
Main()
{
var 转盘 =
new
List<奖品>{
new
奖品{ 名称=
"笔记本"
, 概率百分比=10},
new
奖品{ 名称=
"石楠木烟斗"
, 概率百分比=20},
new
奖品{ 名称=
"一块糖"
, 概率百分比=80},
new
奖品{ 名称=
"随便"
, 概率百分比=1},
new
奖品{ 名称=
"一只绣花鞋"
, 概率百分比=5}};
Enumerable.Range(1, 20).ToList().ForEach(x =>
{
Console.WriteLine(
"第{0}次选择{1}"
, x, 抽奖(转盘).名称);
});
Console.ReadKey();
}
static
Random Rnd =
new
Random();
private
static
奖品 抽奖(List<奖品> 转盘)
{
return
(from x
in
Enumerable.Range(0, 1000000)
let 随机选择一个奖品 = 转盘[Rnd.Next(转盘.Count())]
let 支骰子 = Rnd.Next(0, 100)
where 支骰子 < 随机选择一个奖品.概率百分比
select 随机选择一个奖品).First();
}
class
奖品
{
public
string
名称;
public
int
概率百分比;
}