简单的抽奖程序

private void button1_Click(object sender, EventArgs e)
        {
            Dictionary<stringint> dic = new Dictionary<stringint>();
            dic.Add("苹果", 30);
            dic.Add("梨子", 15);
            dic.Add("南瓜", 60);
 
            int total = 0;
 
            //把几种奖品的属性值加起来。
            foreach (KeyValuePair<stringint> kvp in dic)
            {
                total += kvp.Value;
            }
 
            Random rnd = new Random();
            int rndNum = rnd.Next(1, total + 1);//随机产生一个【1,total】的数。
            int currentTotal = 0;
            foreach (KeyValuePair<stringint> 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)  //最多支100万次骰子
                    let 随机选择一个奖品 = 转盘[Rnd.Next(转盘.Count())]
                    let 支骰子 = Rnd.Next(0, 100)
                    where 支骰子 < 随机选择一个奖品.概率百分比
                    select 随机选择一个奖品).First();
        }
 
        class 奖品
        {
            public string 名称;
            public int 概率百分比;
        }
原文地址:https://www.cnblogs.com/codeloves/p/3110449.html