نقل قول نوشته شده توسط rahnema1 مشاهده تاپیک
اون روش که قبلا گذاشتم و حذف کردم کاملا رندوم نمی داد اما فکر کنم این یکی دیگه رندوم باشه اگه اشکال داشت تذکر بدید
در ضمن تابعی که fmehrvarzi عزیز گذاشتند را امتحان کردم فکر کنم رندوم نباشه یه بار هم خودتون چند بار تست کنید تا مطمئن بشید

int[] RandSum2 (int from1,int to1,int count1,int sum1)
{
to1-=from1;
sum1-=count1*from1;
int sum2=0,ran,mx=to1+1;
Random rr = new Random();
int[] RandArray = new int[count1];
while (mx>to1) {
mx=from1;
do
{
ran=rr.Next(1,Math.Min(to1,sum1-sum2+1));
mx=Math.Max(mx,RandArray[rr.Next(count1)]+=ran);
sum2+=ran;
} while(sum2<sum1);
RandArray=RandArray.Select(x => (int)Math.Round((double)x/mx*(Math.Min(mx,to1)))).ToArray();
sum2=RandArray.Sum();
}
RandArray=RandArray.Select(x => x+from1).ToArray();
return RandArray;
}

واسه انتخاب ده تا عدد که بین 1 تا 7 باشند و جمعشون بشه 50 این دستورشه

int[] myarr=RandSum2(1,7,10,50);
این الگوریتم به دلیل رعایت نکردن همان نکته ای که در مورد نحوه استفاده از کلاس رندوم گفتم (که به صورت استاتیک باید باشد)وقتی که در یک حلقه حتی کوچک قرار میگیرد، اعداد تکراری تولید میکند!