«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
بهترین الگوریتم تولید n عدد تصادفی بدون تکرار در گیم میکر+vb6 + basic4android+یونیتی+سیشارپ :: گیم اور

گیم اور


خصوصی نظر نذارید نمی تونیم جواب بدیم.

عضو کانال تلگرام ما بشید توش گروه هم می گیم

لینک کانال خصوصی گیم اور :

https://t.me/gameoverblog

پیوندهای روزانه
پیوندها

تا آخرش بخونید لطفا

http://gameover.blog.ir

منبع :

http://promakers.ir/showthread.php?tid=10091&pid=108607

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

//game maker script
//Generating random numbers without repeating
//Author:sajjad3011....gameover.blog.ir....
//
n=8
a[0]=irandom_range(0,n)
for(i=1;i<=n;i++)
{
a[i]=irandom_range(0,n);
for(j=0;j<=(i-1);j++)
 {
   if(a[i]==a[j])
   {
    a[i]=irandom_range(0,n);
    j=0;i--;
   }//if
  }//for j
}//for i
-----------
حالا برای VB6 :

یک listview و یک command button بذارید روی فرم حله

http://s5.picofile.com/file/8153302468/random_bi_tekrar_vb6.jpg

اینم کد دیگه چی میخوایدbig grin :

کد:
'Author:sajjad3011
Private Sub Command1_Click()
List1.Clear

Const n = 9
Dim a(0 To n) As Integer


' Generate random value between 1 and n
a(1) = CInt(Int((n * Rnd()) + 1))

For i = 2 To n
a(i) = CInt(Int((n * Rnd()) + 1))
For j = 1 To i - 1
   If (a(i) = a(j)) Then
  
   a(i) = CInt(Int((6 * Rnd()) + 1))

    j = 1
    i = i - 1
   End If 'if
  Next j 'or j
Next i 'for i

For i = 1 To UBound(a)
List1.AddItem (a(i))
Next i
End Sub




'----------------------------
حالا بهترین الگوریتم برای تولید اعداد تصادفی :
منبع :
https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
در روش های قبلی از همون اول عناصر رو به رندوم تولید می کردیم و بررسی می کردیم و به صورت غیر تکراری توی عناصر آرایه می ریختیم این کار بهینه نیست.
در این روش  دو مرحله ی ساده رو انجام می دیم:

1. ابتدا اعداد 0 تا n-1 رو می ریزیم توی خونه های آرایه.
2. سپس می یایم محتوای خونه های آرایه رو به صورت رندوم جابجا می کنیم با هم.
اینم الگوریتمش :
for i from 0 to n − 2 do
       j ← random integer such that i ≤ j < n
       exchange a[j] and a[i]
نکته:
توی یونیتی تابع تولید عدد تصادفی اینه (خودتون می تونید ازش الگو بگیرید با الگوریتم بالا):

Random.Range(min,max)




مثال سیشارپ:

for(k=0;k<myarr.length-2;k++)
{
a = random.range(0,n);
b = random.range(0,n);

temp=myarr[a];
myarr[a]=myarr[b];
myarr[a]=temp;

}
موافقین ۰ مخالفین ۰ ۹۴/۰۵/۱۴
مدیرکل

نظرات (۱)

سلام من یک الگوریتم می خوام که اینطوری بشماره مثلا 11 رو می خواد بخونه....ما بنویسم 1#1  بعد بگیم ابتدا # حذف کن بعد با کنار هم قرار دادن اعداد یک کنار یک بشه 11  ...برای ضد هک برنامه می خوام میشه؟ ممنون
پاسخ:
بیا توی کانال و گروه تلگرام ما از بچه ها بپرس
@gameoverblog

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی