2

私はそれをやろうとしましたが、それを理解することができませんでした、

私がセットを持っているとしましょう:{1,2,3,4,5}

そして私は次のような2つの要素の組み合わせが欲しいです:

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

どうすればObjective-cでそれを実装できますか?

アルゴリズムを確認しましたが、どうすればよいかわかりませんでした。以前に確認したメインのURLは次のとおりです。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秒で実行できます。最初のループでは、要素を繰り返し処理しi、2番目のループでは、値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 に答える