2

我试图这样做,但无法弄清楚,

假设我有一套:{1,2,3,4,5}

我想要两个元素的组合,比如:

{1,2}
{1,3}
{1,4}
{1,5}
{2,3}
{2,4}
{2,5}
{3,4}
{3,5}
{4,5}

我如何在objective-c中实现它?

我已经检查了算法,但我无法弄清楚我该怎么做..这是我之前检查过的主要网址:从 n 返回 k 元素的所有组合的算法

如果有人可以帮助我,我会很高兴..

问候。

4

2 回答 2

4

只是一个嵌套循环遍历数组元素并将组合写入结果数组应该可以工作(此代码经过测试并且有效):

NSArray *set = [[NSArray alloc] initWithObjects:
                [NSNumber numberWithInteger:1],
                [NSNumber numberWithInteger:2],
                [NSNumber numberWithInteger:3],
                [NSNumber numberWithInteger:4],
                [NSNumber numberWithInteger:5], nil];

NSMutableArray *combinations = [[NSMutableArray alloc] init];

for (NSInteger i=0; i<[set count]; i++) {
    for(NSInteger j=i+1; j<[set count]; j++){
        NSArray *newCombination = [[NSArray alloc] initWithObjects:
                                   [set objectAtIndex:i],
                                   [set objectAtIndex:j],
                                   nil];
        [combinations addObject:newCombination];
        NSLog(@"added combination %@", newCombination);
    }
}

在这个嵌套循环结束时, NSMutableArray组合包含你所有的组合。

于 2012-09-02T18:49:03.717 回答
1

您可以使用 2for-loop秒来完成此操作。在第一个循环中,您遍历元素 asi和在第二个循环中从值j=i+1到集合中元素数的计数结束。

它可能是这样的:

 for (i = 0; i < length_set; i++)
{
    for (j = i + 1;length_set; j++)
    {
        print ("%d%d\n", set[i], set[j]);
    }
}

}

注意:它只是一个伪代码,我没有检查语法,它只是为了显示逻辑。

于 2012-09-02T18:38:01.070 回答