ホームページ > バックエンド開発 > C++ > C# でランタイムサイズのリストから可能なすべての組み合わせを生成するにはどうすればよいですか?

C# でランタイムサイズのリストから可能なすべての組み合わせを生成するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-16 17:17:11
オリジナル
132 人が閲覧しました

How to Generate All Possible Combinations from a Runtime-Sized List in C#?

実行時サイズの値のリストから可能なすべての組み合わせを生成します

典型的なプログラミング シナリオでは、指定された整数のリストから要素の可能なすべての組み合わせを生成する必要がある状況に遭遇します。 C# でこれを実現するには、次の手順に従います:

  1. 実行時リストのサイズを決定する: 特定の値で初期化された整数のリストを作成します。汎用の List<int> を使用して、実行時に任意の数の要素に対応することもできます。
  2. 組み合わせの数を計算します: n 個の要素のリストの場合、組み合わせの数は、整数のバイナリ表現を使用して 2^n で与えられます。この値を使用して、考えられるすべての組み合わせをループできます。
  3. 組み合わせの生成: 1 から 2^n - 1 までの i の値ごとに、i をバイナリ文字列に変換し、リストの長さに一致するように必要に応じてゼロを埋め込みます。このバイナリ文字列は、選択する要素の組み合わせを表します。
  4. 要素の選択: バイナリ文字列を走査します。ビットが 1 の場合、対応する要素が組み合わせに含まれていることを意味します。選択した要素を一時リストに追加します。
  5. 組み合わせを印刷: 一時リスト内の要素を印刷し、組み合わせごとにこのプロセスを繰り返します。

以下は、このアルゴリズムを実装するサンプル コードです:

<code class="language-csharp">using System;
using System.Collections.Generic;

public class CombinationGenerator
{
    public static void Main(string[] args)
    {
        GenerateCombinations(new List<int> { 1, 2, 3 });
    }

    public static void GenerateCombinations(List<int> list)
    {
        int count = (int)Math.Pow(2, list.Count);
        for (int i = 1; i < count; i++)
        {
            List<int> combination = new List<int>();
            string binary = Convert.ToString(i, 2).PadLeft(list.Count, '0');
            for (int j = 0; j < binary.Length; j++)
            {
                if (binary[j] == '1')
                {
                    combination.Add(list[j]);
                }
            }
            Console.WriteLine(string.Join(", ", combination));
        }
    }
}</code>
ログイン後にコピー

このアルゴリズムを使用すると、サイズに関係なく、リスト内の要素の可能なすべての組み合わせを効率的に生成できます。

以上がC# でランタイムサイズのリストから可能なすべての組み合わせを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート