PDA

View Full Version : سوال: اعداد تصادفی غیر تکراری



ali reza mansoori 2
یک شنبه 01 اردیبهشت 1392, 14:48 عصر
سلام
دوستان زیاد سرچ کردم ولی به نتیجه نرسیدم
میخوام بین دو رنج اعداد تصادفی غیر تکراری تولید کنم
مثلا بین عدد 100 تا 200 و بین عدد 300 تا 400 خروجی به صورت زیر باشه
100
350
380
120
200
320
316

Pis7Aller
یک شنبه 01 اردیبهشت 1392, 15:19 عصر
با سلام .... من این برنامه رو واسه 10 تا عدد تصادفی نوشتم که تعداد اعدادی رو هم که از بازه ی اول انتخاب میکنه رندوم انتخاب کردم ..
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
int[] a = new int[10];
Random r = new Random();
int share= r.Next(1, 10);
Random r1 = new Random();
Random r2 = new Random();
for (int i = 0; i < share; i++)
{
a[i] = r1.Next(200, 300);
for (int j = 0; j < 10; j++)
{
if (a[i] == a[j] && i != j)
{
i--;
break;
}
}
}
for (int i = share; i < 10; i++)
{
a[i] = r1.Next(400, 500);
for (int j = 0; j < 10; j++)
{
if (a[i] == a[j] && i != j)
{
i--;
break;
}
}
}

for (int i = 0; i < 10; i++)
{
textBox1.Text += " " + a[i];
}

}

این قطعا بهینه ترین برنامه نیست اما واسه نمونه خوبه فکر کنم :D

یوسف زالی
یک شنبه 01 اردیبهشت 1392, 15:58 عصر
سلام.
موفق ترین و سریع ترین روش برای اعداد تصادفی غیر تکراری استفاده از روش Shuffling هست.
شما اعداد رو به ترتیب از 100 تا 200 بنویس.
حالا به طور تصادفی به تعداد مثلا 100 بار میای و جای دو تا از این ها رو با هم عوض می کنی (بر می زنی).
یعنی دو تا انتخاب به طور تصادفی از لیست می کنی و با هم عوضشون می کنی.
بعد از چند بار تکرار، لیستی غیرمرتب و تصادفی از اعداد داری.
به راحتی از اولی شروع کن!
یعنی اولی می شه عدد تصادفی اول. دومی می شه عدد تصادفی دوم و ...
مطمئن هم هستی که تکرار نداره.

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

erfan_urchin
یک شنبه 01 اردیبهشت 1392, 18:41 عصر
Random r = new Random();
int[] a = new int[10];
int i,j,n,c;
for (i = 0; i < 10; )
{
c = 0;
n = r.Next(100, 200);
for (j = i - 1; j >= 0; j--)
if (n == a[j])
{
C++‎;
break;
}
if (c == 0)
{
a[i] = n;
i++;
}
}

saman-arsenal
یک شنبه 01 اردیبهشت 1392, 19:52 عصر
فکر کنم این عنوان تکراری باشه یه سرچ توو سایت میکردی پیدا میشد

من پارسال بود فکر کنم که این کد و از همینجا گرفتم فکر کنم:متفکر:

///<summary>
/// ایجاد شاخص تصادفی برای یک محدوده
///</summary>
///<param name="MinValue"></param>
///<param name="MaxValue"></param>
///<returns></returns>
publicstaticint[] GetRandomIndex(int MinValue, int MaxValue)
{
List<int> RtnList = newList<int>();
Random R = newRandom();
int Cnt = 0;
while (Cnt < MaxValue - MinValue + 1)
{
int r = R.Next(MinValue - 1, MaxValue + 1);
if (BetWeen(r, MinValue, MaxValue) && !RtnList.Contains(r))
{
RtnList.Add(r);
Cnt++;
}
}
return RtnList.ToArray();
}
publicstaticbool BetWeen(object MainValue, object Value1, object Value2)
{
decimal TmpMainValue = Convert.ToDecimal(MainValue);
decimal TmpValue1 = Convert.ToDecimal(Value1);
decimal TmpValue2 = Convert.ToDecimal(Value2);
return (TmpValue1 <= TmpMainValue && TmpMainValue <= TmpValue2);
}

tooraj_azizi_1035
یک شنبه 01 اردیبهشت 1392, 20:29 عصر
Random rand = new Random();
List<Int32> result = new List<Int32>();
for (Int32 i = 0; i < 300; i++)
{
Int32 curValue = rand.Next(1, 100000);
while (result.Exists(value => value == curValue))
{
curValue = rand.Next(1, 100000);
}
result.Add(curValue);
}