2016-11-03 5 views
0

誰か助けてくれますか?私は数式を見つけて、次に書くPHP言語でコードの一部を書くことを試みていますkサイズの文字リストでnサイズの組み合わせをすべて取得する

私たちは3種類の何かを想像してみましょう。この数字の長さはさまざまです(n長) (!)が、隣接タイプは、同じであってはならない - 1,1又は例えば

2,2 K = 1,2,3 N = 5

出力1,2,3,1 、2 | 1,2,3,1,3 | 1,2,3,2,1 | 1,2,3,2,3 |

1,3,2,1,3 | 1,3,2,1,2 | 1,3,2,1,3 | 1,3,2,3,1 | 1,3,2,3,2 .........これは

Mbがplsは私と一緒にいくつかの共通の命名問題、シェアを持っており、

についてのいくつかのリソースを探してみてくださいI'will

ありがとう

+0

StackOverflowのコーディングサービスではありません。また、[mcve]と[宿題](http://meta.programmers.stackexchange.com/questions/6166/open-letter-to-students-with-homework-problems)を参照してください – Mat

答えて

0

最も簡単な方法をお気軽に、役立ちました-1)n-1)。

擬似コード:N = 4

Generate(list, n, k, lastvalue) 
    if (list.length = n) 
      output(list) 
    else 
      for i = 1 .. k 
       if (i != lastvalue) 
        Generate(list + i, n, k, i) 

Delphiコード

procedure Generate(list: string; n, k, lastvalue: Integer); 
var 
    i: Integer; 
begin 
    if (Length(list) = n) then 
      Memo1.Lines.Add(list) 
    else 
      for i := 1 to k do 
       if (i <> lastvalue) then 
        Generate(list + IntToStr(i), n, k, i) 
end; 

begin 
    Generate('', 4, 3, 0); 

出力、K = 3

1212 1213 1231 1232 1312 1313 1321 1323 
2121 2123 2131 2132 2312 2313 2321 2323 
3121 3123 3131 3132 3212 3213 3231 3232 
+0

ありがとう、しかし、私はどのように動作するのか知りません私はこれを実装しようとしていましたが、プログラムがメモリリークで停止します 最初の関数呼び出しの最後の値はどれでしょうか?? – scion4581

+0

私がDelphiコードを表示することができれば、これが役に立ちます。 – MBo

+0

私はあなたが学生だったとき私はデルファイを学んでいた場合、 – scion4581

0

よくループでループします。 kは長さを持ち、k変数の数字はあなたが移動するものであり、外側のループを表します。 (forループ) 今では、uには既知のnもあるので、出力に沿って実行することができます。 uはn [1]の最初の変数としてk [1]を置き、内側ループが終わるまで変化しません。 (この場合、k [1]は1です)。今度は、作成されたn個の配列の上で実行される変数(たとえば変数)でwhileループを実行します。 nは(1、null、null、null、null)になります。一方、a!= n.lenth()です。 uは、それが同じでないことを確認するためにn(a-1)をチェックします。 aがn.lengthに達するたびに、最後の数の値をk配列の次の値で変更し、次に2つのスポット(n [a-1])に戻ってそれを変更して戻って、すべての方法で再帰的に行くすべてのスポットが変更され、配列のn [2]がk配列の最高値を持つまで開始します。人生を楽にするために、新しい配列を作ることができます。問題としてjを割り当てることができます。最も近いn [a]スポットが最後の値を取るとすぐに値を取得します。

BTWいつでも、スポットアレイuの値をリセットすると、kアレイのすべての数値が再びオプションになるようにnullが実行されます。 j配列が一杯になったら、すべての配列をリセットしてforループ内を移動します。

希望は、私は、n、kは大きくない-NOTEある場合(バリアント数がk個の*(Kであることをあなたが持っている場合はご質問は再帰的である世代このようなリストの

関連する問題