تالار گفتمان nCIS.ir

نسخه‌ی کامل: کار با تابع rand
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
من تابعی لازم دارم که در یک بازه مشخص عدد تصادفی تولید کنه منتها در اون بازه عدد یا عدد های مورد نظر رو خروجی نده.
مثلا فرض کنید یک عدد تصادفی بین 0 تا 100 تولید کنه ولی عدد های 5 و 7و 23 و 85 تولید نشه به هیچ عنوان.
البته می توانم به این صورت بنویسم که اول یکبار اجرا بشه و خروجی اگر 4 عدد بالا نبود که خوب درست است ولی اگر از 4 عدد بالا بود دوباره اجرا بشه تا بالاخره عددی بیرون باید که از 4 عدد بالا نباشه. ولی این روش اصلا بهینه نیست و اگر تعداد اعداد استثنا زیاد بشن سرعت پایین میاد.
باید ببینید احتمال برابر بودن خروجی با استثناها چقدر هست، و همچنین دامنه ی اعداد مجاز و استثناها در بدترین حالت شما چقدره!

میشه اعداد مجاز رو درون آرایه ریخت و از اون فضا عدد تصادفی رو انتخاب کرد! (اگر تعداد اعداد مجاز و استثناها زیاد نباشه به گمانم روش خوبی باشه)

من فضای صورت مسئله شما نمی دونم، ولی احتمال میدم به روش اول خودتون در بدترین حالت ها شاید 10 بار عملیات تکرار بشه که باز هم بهینه هست!
(15-03-1394، 10:46 ب.ظ)rezakho نوشته: [ -> ]میشه اعداد مجاز رو درون آرایه ریخت و از اون فضا عدد تصادفی رو انتخاب کرد! (اگر تعداد اعداد مجاز و استثناها زیاد نباشه به گمانم روش خوبی باشه)

سلام
این روش چگونه است؟
یعنی چطوری می تونم از یک فضای خاص عدد تصادفی استخراج کنم؟
$valid = range(0, 100);
unset($valid[5], $valid[7], $valid[23], $valid[85]);
$valid = array_values($valid);
$randomNumber = $valid[array_rand($valid)];
زحمتش رو کشیدن

:)
تو اون انجمن کذایی :D هم جوابتو دادم این روش هم خوبه
$nums = range(1, 100);
$exclude = array(5, 7, 23, 85);
$newNums = array_diff($nums, $exclude);
echo rand($newNums);
http://stackoverflow.com/questions/64431...clude-some

اینجا هم روش جالبی گفته شده.