QA@IT

【javascript】1~3の数字で、重複しない3桁の組み合わせを作りたい。

6840 PV

開発環境
windows7 32bit、chrome(41.0.2272.76 m)、JavaScript

やりたいこと
1、1~3の数字を使って3桁の組み合わせを作る。3*3*3で27通り。
2、ただし、重複してはならない。
3、出力は、1、123のように、順番と組み合わせを改行付きでセットで表示する。

困っていること
配列の重複の有無を確認しながら、重複があった場合には重複がなくなるまで組み合わせを再試行するようにループさせたいです。しかし、私がやってみたプログラムでは、重複分も27個ある要素数の1つに数えられてしまい、正確に出力できません。また、for(var i =0;i < 27;i++)の継続条件を、重複分を除いて27より小さく(i < i-tyouhuku = 27)とやってみましたが、これもうまくできませんでした。よろしくお願いします。

参考プログラム


//使う数字を配列化。重複を除いた全ての組み合わせが何通りかを計算する。
var arr = ["1","2","3"];
var all =Math.pow(arr.length,arr.length);

//組み合わせの配列を初期化
    var allkumiawase_arr = [];

//重複した数
        var tyouhuku = 0;

//27通りの要素数の配列を作る。
    for(var i =0;i < 27;i++){
//123の組み合わせを作る。
            var kumiawase_arr = [];
                for(var j =0;j < arr.length;j++){
                kumiawase_arr = kumiawase_arr+arr[Math.floor(Math.random()*(2-0)+0)];
                }
//重複がなければ、配列を連結。重複分を引く。
                    if($.inArray(kumiawase_arr, allkumiawase_arr) == -1){
                    allkumiawase_arr = allkumiawase_arr.concat(kumiawase_arr);
                    document.write(i+1-tyouhuku+","+allkumiawase_arr[i-tyouhuku]+"<br>");
//重複があれば、重複分を加算
                    } else {
                    tyouhuku++;
                    }
    }

回答

これってこんな感じで作るんじゃないの?


var s;

for(var i=1;i<= 3;i++){
    for(var j=1;j<= 3;i++){
        for(var k=1;k<= 3;i++){
            s = String.valueOf(i) + String.valueOf(j) + String.valueOf(k);
            document.write(i +","+ s + "<br>");
        }
    }
}

編集 履歴 (0)
  • 回答ありがとうございました。ランダムに生成せずに、順番ずつ生成していけばよかったんですね。この組み合わせの作り方、数学の授業でやっていたのに忘れてました。 -

3、出力は、1、123のように、順番と組み合わせを改行付きでセットで表示する。

1桁の出力はないのでは?

各桁の数字をi, j, kとすると
i=1,2,3のそれぞれに対し
j=(i % 3) + 1, ((i + 1) % 3) + 1
k = 6 - i - j
でよいかと。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。