PDA

View Full Version : گفتگو: ايجاد n تا عدد تصادفي در بازي مشخص



yase_vahshi
یک شنبه 07 شهریور 1389, 19:28 عصر
سلام دوستان. ميخواستم نظرتونو درباره ايجاد n تا اعدا تصادفي در يك بازه مشخص مثلا از 1 تا n رو بدونم. البته اعداد بايد غير تكراري باشه.:متعجب:

returnx
یک شنبه 07 شهریور 1389, 19:57 عصر
شما میتونید از تابع Rnd در vb یا random در C++‎ برای ایجاد n عدد Random در یک بازه از فرمول زیر استفاده کنید:

rnd*(H-L+1)+L

yase_vahshi
دوشنبه 08 شهریور 1389, 01:57 صبح
مثلا من مي خوام 50 تا عدد تصادفي از 1 تا 50 ايجاد كنم كه غير تكراري باشه.

qwerty11
دوشنبه 08 شهریور 1389, 13:29 عصر
فکر نکنم جوای زیاد سخت باشه، یه آرایه ی 50 تایی در نظر بگیر و a[i]I ها رو مساوی i قرار بده. بعدش 50 بار این کاری که میگم رو انجام بده : هر بار 2 تا عدد تصادفی x و y تو بازه ی 1 تا 50 به دست بیار و جای دو خونه ی a[x]I و a[y]I رو با هم عوض کن.

yase_vahshi
دوشنبه 08 شهریور 1389, 17:39 عصر
من ميخوام اعداد غير تكراري باشه.يعني فقط توي يه آرايه مثلا عدد5 رو فقط يه بار به صورت تصادفي انتخاب كنه. روش شما ميتونه درست باشه؟:متفکر:

qwerty11
دوشنبه 08 شهریور 1389, 21:58 عصر
:متفکر:

چرا نمیتونه درست باشه !؟ چون درست بود گفتم دیگه. شما یه بار به صورت غیر تکراری به آرایه عدد نسبت میدید و بعدش تنها کاری که انجام میدید اینه که اعداد رو با هم swap کنین. همین.

tooraj_azizi_1035
دوشنبه 26 مهر 1389, 10:37 صبح
سلام،
دوست عزیز سوال شما تولید n عدد تصادفی غیر تکراری در بازه 1 تا n است که اصلاً نیازی به استفاده از تابع تولید عدد تصادفی نداریم چون شما براحتی یک For می گذارید و از 1 تا n خانه های آرایه را پر می کنید (اعداد هم یکتا خواهند بود) بعد اگر خواستید ترتیب قرارگیری ای اعداد در خانه های آرایه را تصادفی قرار دهید از تابع Rnd به روشی که دوستمان پیشنهاد کرد اقدام کنید.
اما اگر قرار باشد n عدد تصادفی در بازه 1 تا x تولید کنید شما باید از یک درخت دودویی استفاده کنید. در ابتدا اقدام به تولید یک عدد تصادفی کرده و سعی کنید آن را به عنوان یک Node به یک درخت دودویی بیفزایید در برنامه اگر چنین Nodeی از قبل ساخته شده بود شما باید مجددا یک عدد دیگر تولید کنید و این را تا زمانی که مطئن شوی Node قبلا اضافه نشده و جدید است ادامه بدهی و در نهایت آن را به درخت اضافه کنی.
با این روش هم از روش BST برای جستجو جهت مطمئن شدن از غیر تکراری بودن استفاده کرده ای و هم می توانی اعداد تولید شده را به ترتیب صعودی یا نزولی یا به هم ریخته نمایش بدهی. در صورتی که اگر بخواهی پس از تولید یک عدد تصادفی آن در آرایه قرار بدی مجبوری از جستجوی خطی که سربار زیادی داره استفاده کنی.:بوس:
Hope this helps.