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

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

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

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

:)
پاسخ
تشکر شده توسط:
#6
تو اون انجمن کذایی :D هم جوابتو دادم این روش هم خوبه
$nums = range(1, 100);
$exclude = array(5, 7, 23, 85);
$newNums = array_diff($nums, $exclude);
echo rand($newNums);
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط: sorkhabi , mehdi4467 , راوندی
#7
http://stackoverflow.com/questions/64431...clude-some

اینجا هم روش جالبی گفته شده.
پاسخ
تشکر شده توسط: mehdi4467




کاربران در حال بازدید این موضوع: 1 مهمان