摘自網絡 數組
static void Main(string[] args) { //各物品的機率保存在數組裏 float[] area = new float[4]{ 0.5f, 0.5f, 0, 0 }; //單次測試 //Console.WriteLine(Get(area)); //批量測試 int[] result = new int[4]{ 0, 0, 0, 0 }; for (int i = 0; i < 1770000; i++) //爲了比對結果方便,這裏循環的次數是總機率的1000倍 { int n = Get(area); //本次抽獎結果 result[n]++; //統計抽到的次數 } Console.WriteLine("結果:"); foreach (int times in result) { Console.WriteLine(times); } Console.ReadLine(); } /// <summary> /// 獲取抽獎結果 /// </summary> /// <param name="prob">各物品的抽中機率</param> /// <returns>返回抽中的物品所在數組的位置</returns> private static int Get(float[] prob) { int result = 0; int n = (int)(prob.Sum() * 1000); //計算機率總和,放大1000倍 Random r = new Random(); float x = (float)r.Next(0, n) / 1000; //隨機生成0~機率總和的數字 for (int i = 0; i < prob.Count(); i++) { float pre = prob.Take(i).Sum(); //區間下界 float next = prob.Take(i + 1).Sum(); //區間上界 if (x >= pre && x < next) //若是在該區間範圍內,就返回結果退出循環 { result = i; break; } } return result; }