banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

二次元配列の全ての組み合わせを求める、二次元配列の自己積の問題

CG は ETP 基地でのトレーニングもしばらく続いており、その間にいくつかの試験もありました。以下に最近の筆記試験の問題を共有します。この問題は JAVA の試験の追加問題で、要求は非常に簡単です。以下に元の問題があります。

二次元配列の長さと初期値は入力によって決まります。この配列の全順列組み合わせを求める方法はどうなりますか、
つまり:int a [X][X] = {{X,X,X},...} は以下のようになります
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}
または int a [4][4] = {{1,2,3,4},{4,5,6,7},{7,8,9,10}}
a [3][3] の結果は以下のようになります:
147,148,149
157,158,159
167,168,169
247,248,249
............

解決方法:
この問題のアルゴリズムの複雑さに基づいて、3*3 の二次元配列は 3^3 = 27 の出力結果があります。そして、この結果を異なる % と / の演算に利用することで、以下の周期的な変化の規則を得ることができます
// 総出力結果数
int it = (int) Math.pow((a[0].length),(a.length)) -1;
//0-a [0].length の周期 1 の変化規則
//3 の場合:210210210210.....
it % a[0].length;
//0-a [0].length の周期 a [0].length の変化規則
//3 の場合:222111000222111000
(it / a[0].length) % a[0].length;
//0-a [0].length の周期 a [0].length * a [0].length の変化規則
//3 の場合:2222222221111111110000...
(it / a[0].length) / a[0].length % a[0].length;
上記の規則は、私たちが必要とする配列のインデックス表現を満たします

以下は JAVA コードです:

/*
* 二次元配列の全順列組み合わせを求める
*by CG
*/
public static void main(String[] args) {
// テスト配列
int a[][] = {{1 , 2 , 3 },{4 , 5 , 6 },{7 , 8 , 9}};
String s;
// 繰り返しの総回数、ループ量を制御する
int it = (int) Math.pow((a[0].length),(a.length)) -1;
while(it >= 0){
s = "";
//it % a[0].length;
//(it / a[0].length) % a[0].length;
//(it / a[0].length) / a[0].length % a[0].length;
// 一時変数、イテレータを保存する
int temp = it;
for(int m = 0 ; m < a.length ; m++){
if(temp / a[0].length >= 0) {
s += a[m][temp % a[0].length];
temp /= a[0].length;
}
}
System.out.println(s);
it--;
}//while
}//main

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。