کد تولید اعداد تصادفی غیر تکراری در بازه دلخواه به زبان سی شارپ


دات وایت | DotWhite.ir
کد تولید اعداد تصادفی غیر تکراری در بازه دلخواه به زبان سی شارپ

در این پست از دات وایت کد ایجاد اعداد تصادفی در باز دلخواه را قرار داده ایم که شما می توانید با این کد  حداقل و حداکثر بازه تولید اعداد و همینطور تعداد اعداد تولید شده را مشخص کنید تا به نتیجه دلخواه خودتون برسید.

int min : کوچکترین عدد برای تولید اعداد تصادفی

int max : بزرگترین عدد برای تولید اعداد تصادفی

int count : تعداد اعدادی که میخواهید در بازه min تا max تولید بشه

نکته : count نمیتواند بزرگتر از اختلاف min  و max باشد یعنی حداکثر مقدار count به اینصورت می تواند باشد : 

(max-min)=count

مقدار count بیشتر از این مقدار باشد با خطا مواجه خواهید شد.

برای مشاهده کد به ادامه مطلب بروید


static Random random = new Random();

// Note, max is exclusive here!

public static List<int> GenerateRandom(int count, int min, int max)

{

    //  initialize set S to empty

    //  for J := N-M + 1 to N do

    //    T := RandInt(1, J)

    //    if T is not in S then

    //      insert T in S

    //    else

    //      insert J in S

    //

    // adapted for C# which does not have an inclusive Next(..)

    // and to make it from configurable range not just 1.

    if (max <= min || count < 0 ||

            // max - min> 0 required to avoid overflow

            (count > max - min && max - min > 0))

    {

        // need to use 64-bit to support big ranges (negative min, positive max)

        throw new ArgumentOutOfRangeException("Range " + min + " to " + max +"(" + ((Int64)max - (Int64)min) + " values), or count " + count+ " is illegal");

    }

    // generate count random values.

    HashSet<int> candidates = new HashSet<int>();

    // start count values before max, and end at max

    for (int top =max - count; top < max; top++)

    {

        // May strike a duplicate.

        // Need to add+1 to make inclusive generator

        // +1 is safe even for Max Val max value because top < max

        if (!candidates.Add(random.Next(min, top + 1)))

        {

            // collision,add inclusive max.

            // which could not possibly have been added before.

            candidates.Add(top);

        }

    }

    // load them into a list, to sort

    List<int> result = candidates.ToList();

    // shuffle the results because Hash Set has messed

    // with the order, and the algorithm does not produce

    //random-ordered results (e.g. max-1 will never be the first value)

    for (int i =result.Count - 1; i > 0; i--)

    {

        int k = random.Next(i + 1);

        int tmp = result[k];

        result[k] = result[i];

        result[i] = tmp;

    }

    return result;

}

مثال : نحوه ی استفاده از متد بالا(من در این مثال از لیست باکس استفاده کردم که شما میتوانید از آرایه استفاده کنید)


foreach(int item in GenerateRandom(29,1,30))

{

    listBox1.Items.Add(item);

}



تاریخ انتشار : دوشنبه 17 تير 1398 ساعت: 22:14 | نظرات()
برچسب ها : , , , , , , , , , , , , , , , , , , , ,

نویسنده :

بازديد : 517

موضوع: سی شارپ , کد های مفید ,

بخش نظرات این مطلب
نام
ایمیل (منتشر نمی‌شود) (لازم)
وبسایت
:) :( ;) :D ;)) :X :? :P :* =(( :O @};- :B /:) :S
نظر خصوصی
مشخصات شما ذخیره شود ؟ [حذف مشخصات] [شکلک ها]
کد امنیتیرفرش کد امنیتی