#iphone #random #numbers
#iPhone #Случайный #числа
Вопрос:
Я хочу генерировать случайные числа, используя этот цикл. Когда я каждый раз запускаю приложения, я хочу генерировать случайные числа без дубликатов.
Например:
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
Ответ №1:
Это проблема генерации случайных перестановок. Прочитайте это: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]);
}
Комментарии:
1. 1, потрясающе, большое спасибо. Как я могу извлечь значения, используя index. Например, после перетасовки массив имеет вид {3,4,5,1,2}, я хочу получить третье значение индекса 5, так как я могу это получить?
2. Это массив на языке C, поэтому вы можете просто использовать ar[indexyouwant-1] в вашем случае ar[2].
Ответ №2:
Может быть что-то вроде этого,
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;
}