Генерировать случайные числа без дубликатов в iPhone? - PullRequest
1 голос
/ 21 мая 2011

Я хочу генерировать случайные числа, используя этот цикл. Когда я запускаю приложения каждый раз, я хочу генерировать случайные числа без дубликатов .

Например:

for(int i = 0; i < 5; i++)
{ 
     //  int d = random() % i;

       NSLog(@"The Value %d",i);

       NSLog(@"The random Number %d",i);
}

Actual Number Random Number
      1            4
      2            5
      3            2 
      4            1 
      5            3

Ответы [ 2 ]

4 голосов
/ 21 мая 2011

Это проблема генерации случайных перестановок.Прочитайте это: http://www.techuser.net/randpermgen.html

Основная идея (в псевдокоде):

for (i=1 to n) ar[i] = i;
for (i=1 to n) swap(ar[i], ar[Random(i,n)]);

В вашем случае:

 int ar[5],i,d,tmp;
    for(i = 0; i < 5; i++) ar[i] = i+1; 
    for(i = 0; i < 5; i++) {
        d = i + (random()%(5-i));
        tmp = ar[i];
        ar[i] = ar[d];
        ar[d] = tmp;
        NSLog(@"%d",ar[i]); 
    }
0 голосов
/ 21 мая 2011

Может быть как то так,

int rand[5] = {0};
int max = 5;

for(int i = 0; i < max; i++){
 int r = random() % max + 1;
 while([self foundNumber:r inArray:rand limit:i){
  r = random() % max + 1;
 }
 rand[i] = r;
}

- (BOOL) foundNumber:r inArray:rand limit:l {
 for(int i = 0; i < l; i++){
  if(rand[i] == r) return YES;
 }
 return NO;
}
...