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 概率百分比;
}