2

セット [1..N] から K 要素のすべてのバリエーションを生成しようとするこの問題に悩まされています。また、k個のネストされたループでそれを実行できるという考えがあり、再帰的にそれを実行しようとしましたが、成功しませんでした。


私はこの機能を持っています:

public static void PrintVariation(int n, int k, int[] array) 
{ 
   //when k = 2 

   for (int i = 0; i < n; i++) 
   { 
      for (int j = 0; j < n; j++) 
      { 
         Console.WriteLine("{0}, {1}", array[i], array[j]); 
      } 
   } 
} 

kしかし、ランダムな値がある場合はどうすればよいでしょうか?

4

3 に答える 3

0

ここに私のヒントがあります:あなたは再帰を使って正しい軌道に乗っていると思います。

private List<Element[]> getVariations(int k, Element[] elements)
{
    // ... ^_^
    // use getVariations with less elements in here
}
于 2012-01-03T14:34:04.880 に答える
0

私があなたをフォローしているかどうかはわかりませんが、これはあなたがすべきことだと思います:

  1. 「セット[1..N]からK要素のバリエーションを生成する」関数を作成します。そのバリエーションを返す必要があります。
  2. ジェネリック コレクションに追加する別のメソッドの for ループでその関数を呼び出します。関数によって生成されたバリエーションがコレクションに既に存在するかどうかを確認し、そのバリエーションをコレクションに追加することをスキップする別のルーチンを追加することができます。
于 2012-01-03T14:49:28.627 に答える
-1
public static List<List<T>> GetVariations<T>(int k, List<T> elements)
{
    List<List<T>> result = new List<List<T>>();
    if (k == 1)
    {
        result.AddRange(elements.Select(element => new List<T>() { element }));
    }
    else
    {
        foreach (T element in elements)
        {
            List<T> subelements = elements.Where(e => !e.Equals(element)).ToList();
            List<List<T>> subvariations = GetVariations(k - 1, subelements);
            foreach (List<T> subvariation in subvariations)
            {
                subvariation.Add(element);
                result.Add(subvariation);
            }
        }
     }
     return result;
 }
于 2012-01-03T15:21:10.320 に答える