Может кто-нибудь показать мне, как я могу генерировать все возможные комбинации чисел? Например, если у меня есть это arrayOfNumbers = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;
Мне нужно сгенерировать как можно больше шестизначных комбинаций.
Эти комбинации одинаковы для меня 1,2,3,4,5,6 == 1,3,2,5,4,6;
Я придумал довольно простой код, но я хотел бы сделать этот код намного лучше. Могу ли я сделать это как-то без объявления maximumPossibilities
? Общее количество может быть разным в разы, оно может быть от 1 до 48; И countOfNumbersForPlay
может быть разным, от 6 до 11;
+ (NSArray *)generateNumbers{
int MAX_POSSIBILITIES = 7;
int COUNT_OF_NUMS_FOR_PLAY = 6;
NSMutableArray *results = [NSMutableArray array];
NSArray *numbers = [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], [NSNumber numberWithInt:4], [NSNumber numberWithInt:5], [NSNumber numberWithInt:6], [NSNumber numberWithInt:7], nil];
int i = 0;
do {
int x = 0;
NSMutableArray *temp = [NSMutableArray array];
do {
int randomIndex = rand() % numbers.count;
if (![temp containsObject:[numbers objectAtIndex:randomIndex]]) {
[temp addObject:[numbers objectAtIndex:randomIndex]];
x++;
}
} while (x < COUNT_OF_NUMS_FOR_PLAY);
NSArray *sortedArray = [temp sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 intValue] < [obj2 intValue]) {
return NSOrderedAscending;
} else if ([obj1 intValue] > [obj2 intValue]) {
return NSOrderedDescending;
} else {
return NSOrderedSame;
}
}];
if (![results containsObject:sortedArray]) {
[results addObject:sortedArray];
i++;
}
} while (i < MAX_POSSIBILITIES);
return results;
}