2011-10-01 10 views
2

最近、私は様々なサードパーティのソリューションを試してみました。成功しなければ追加するかもしれない。C#での特定の組み合わせ、把握できない

は、私はちょうどでこれを包むことができ、私は承知している、あなたはおそらく、ドリルを取得し、0-2をint型... IE

0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 2 
0 0 0 0 0 0 0 0 0 0 0 1 0 
... 
2 2 2 2 2 2 2 2 2 2 2 2 2 

を言うのすべての可能な組み合わせと13の長さの文字列を生成する必要があります私が汚れた解決策を望むならばループする。すべての指針またはポインタが評価されます。

+1

これらは[順列](http://en.wikipedia.org/wiki/Permutation)ではありません。 – svick

+0

申し訳ありませんが、私の誤解のようです:) –

答えて

0

これは、Nベースの数値システム(例では3つのベースシステム)に数字を追加するだけであると考えることはできません。

私は、あなたがベースを切り替えることができる1つの方法(フレームワークまたはライブラリにまだない場合)を書きます。 IE:

String transformNumberFrom10BaseToXBase(int number, int base) 

そしてちょうど書くforループ(申し訳ありませんが、擬似Cのようなコード:)):

for (int i = 0; i < base^13; i++) { 
    print transformNumberFrom10BaseToXBase(i, base) 
} 

[OK]を、希望に役立ちますか、あなたに解決する方法についてのアイデアを与えますそれ:

+0

これはまた有効な解決策のようにも見えます。私はそれを調べます。洞察に感謝します:) –

4

私はあなたのためのコードを書いてうれしいですが、問題への直感を探しているようです。だから、これは "魚を人に教える"瞬間のように感じるかもしれません。

だから、私はあなたにいくつか質問をしてみましょう:

はのは、N = 1の場合には何長さNの文字列に問題を一般化してみましょうように見えますか?それは

0 
1 
2 

そしてN = 2の場合のように見えますか?それはあなたが、私たちは簡単に(別名生成)を導出することができますどのように、N = 1の場合与え見ることができれば、私は疑問に思う

00 
01 
02 
10 
11 
12 
20 
21 
22 

非常に機械的な方法で、N = 2の場合です。今、この特定のケースのパターンが見える場合は、一般的なケースのパターンは何ですか?すなわち、すでに長さNの文字列の答えが手元にあった場合、長さN + 1の文字列の答えを私に提供するよう依頼しましたか?もしそうなら、あなたは再帰アルゴリズムの定義を持っています。

PS私は、これらの組み合わせを順列ではなく呼び出すと思います。

+0

うん、それはいくつかのものをクリアします、あなたは魚に別の初心者を教えているかもしれない:)私はいくつかのことを試してみるつもりです。 –

0

私は素早く順列のリストを返す関数を書いたので、あなた自身のメソッドを書く時間がなければ、それを使うことができます。長さは置換の長さ、最大は最大の数です(あなたの場合、2となります)

static List<int[]> getPermutationList(int length, int max) 
    { 
     List<int[]> perm_list = new List<int[]>(); 
     int[] perm = new int[length]; 
     for (int i = 0; i < length; ++i) 
      perm[i] = 0; 
     while(true) 
     { 
      for (int i = length - 1; ; --i) 
      { 
       if (i == -1) 
        return perm_list; 
       if (perm[i] < max) 
       { 
        perm[i]++; 
        for (int j = i + 1; j < length; ++j) 
         perm[j] = 0; 
        break; 
       } 

      } 
      int[] perm_copy = new int[length]; 


      for (int i = 0; i < length; ++i) 
      { 
       perm_copy[i] = perm[i]; 
      } 
      perm_list.Add(perm_copy); 
     } 
     return perm_list; 
    } 
関連する問題