با این کد شما می تونید عدد مورد نظر رو انتخاب کنید ابتدا
using System.Linq;
وسپس
int[] items = new int[] {500,500,500,500,300,300,200,200,200,200,200,200,1 00,100,100,100,100,10,10,2,2,2,2,2};
ulong sum=0;
var cumhistogram=items.GroupBy(i => i).OrderBy(i=>i.Key).Select(g => new {Item = g.Key,Count = sum+=(ulong)(g.Count()*g.Key)}).ToList();
Random rr = new Random(DateTime.Now.Millisecond);
ulong maxval=cumhistogram.Last().Count;
برای انتخاب یک عدد از میان آرایه با احتمالی که اشاره کردید از متغیر selected استفاده کنید:
int selected =cumhistogram.FirstOrDefault(c => c.Count>=(rr.NextDouble()*maxval)).Item;