قطعِ احتمالِ تولیدِ اعدادِ تصادفیِ تکراری
سلام دوستان
با ()Math.random یک بازه ی اعداد مثلا بین 1 تا 8 تولید کردم.هروقت که این دستور اجرا میشه یک عدد تصادفی بین 1 تا 8 تولید میشه.بعضی وقت ها پیش میاد که در تولید عدد تصادفی چند عدد پشت سر هم تکرار میشه.
مثلا یکبار عدد تصادفی، 8 انتخاب میشه و بعد از اون دوبار دیگه باز هم عدد 8 انتخاب میشه.
میخوام توی این اعداد تصادفی یه کاری کنم که کل بازه ی بین 1 تا 8 یک بار حدس زده بشه و بعد دوباره بیاد از اول بین 1 تا 8 اعداد حدس زده بشه.نمیخوام یک عدد، 2 بار بصورت تصادفی پشت سر هم انتخاب بشه.
در واقع میخوام که احتمال تولید اعداد تصادفی تکراری رو به صفر برسونم.همچین چیزی امکان پذیر هست ؟
امیدوارم منظورم رو رسونده باشم.ممنونم از همکاریتون :)
دوستان سلام و خسته نباشید
این مشکل سال هاست در تمام مسابقات برنامه نویسی مطرح میشه و تقریبا همه باهاش مشکل دارن یک پاسخ راحت داره اونم حلقه وایله!
while (counter != 7){
randomNumber= ...Random.nextInt();
if ([randomNumber % bitArray.length] != 0){
print(randomNumber % bitArray.length)
[randomNumber % bitArray.length]= 0;
counter++
}
}
معلومه که امکان پذیر هست !
یک آرایه از اعدادی که قبلا تولید شده داشته باشید ، اگر عدد در آرایه بود ، دوباره عدد جدیدی تولید کنید
هرچی بازه اعداد بیشتر باشه احتمال اومدن اعداد تصادفی که تکراری باشه کم تر میشه.
به عنوان مثال:اعداد تصادفی از 1 تا 10 رو در نظر بگیرید.در این بازه احتمال اینکه عدد 4 چند بار بیاد خیلی خیلی بیشتر از اینه که عدد 4 در بازه های 1 تا 1000 بیاد.
خب یه مثال دیگه:احتمال اومدن عدد 4 در بازه اعداد 1 تا 10 باز هم بیشتر از اینه که ما چند تا عدد رندم از 1 تا 10 انتخاب کنیم بعد از بین این اعداد رندم یک عدد رندم انتخاب کنیم.
با حرفایی که در بالا زدم قصد داشتم جمله زیر رو بگم.
ما به جای اینکه بیایم از تابع رندم خود زبان برنامه نویسی استفاده کنیم و برای اینکه اعداد تکراری بهمون نده بیام یک آرایه تعریف کنیم و سربار های زیادی رو به برناممون محول کنیم،بیایم یک تابع رندوم خودمون بنویسیم و قواعدی مثل قواعد بالا رو توش پیاده کنیم تا احتمال اومدن یک عدد رندوم تکراری رو تا حداقل ممکن کم کنیم.
البته من این تابع رو تا یه جاهایی تعریف کردم و نتیجه خوبی هم داشته ولی دارم تلاش میکنم این درصد تکرارو باز هم کاهش بدم.حتی در بازه اعداد 1 تا 10.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .