【发布时间】:2011-11-10 19:30:28
【问题描述】:
谁能告诉我如何生成所有可能的数字组合?例如,如果我有这个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;
}
【问题讨论】:
-
en.wikipedia.org/wiki/Combination - 这就是你想要的吗?
-
是的,这正是我所需要的,但我如何在 xcode c++ 中做到这一点?我的解决方案对我来说不够好。
-
这听起来像是其他人的家庭作业吗?
-
不,您不必在这里编写确切的代码,我只需要一点帮助,我如何改进我的代码。谢谢
标签: objective-c algorithm combinations