私が達成しようとしていることを表す CS 用語があると確信していますが、それが何であるかはわかりません。a
3 つの配列があります。それらを 、b
、および と呼びましょうc
。反復となる配列のすべての可能な組み合わせを反復していa*b*c
ます。
int
現在の反復 (iteration
から0
まで ) と、、a*b*c-1
および の長さの関数を渡しています。その関数が、反復回数と、、および の長さだけから計算された、インデックスのすべての一意の順列を出力できるようにしたいと考えています。a
b
c
a
b
c
これは私が今持っているものです:
class Test {
public static void printIndices(int i, int a, int b, int c) {
System.out.println(i%a + ", " + (i+1)%b + ", " + (i+2)%c);
}
public static void main(String[] args) {
int a[] = new int[2];
int b[] = new int[2];
int c[] = new int[3];
int iterations = a.length * b.length * c.length;
for (int i=0; i < iterations; i++){
printIndices(i, a.length, b.length, c.length);
}
}
}
次の出力が生成されます。
0, 1, 2
1, 0, 0
0, 1, 1
1, 0, 2
0, 1, 0
1, 0, 1
0, 1, 2
1, 0, 0
0, 1, 1
1, 0, 2
0, 1, 0
1, 0, 1
ご覧のとおり、重複があります。出力を次のようにしたい:
0, 0, 0
1, 0, 0
0, 1, 0
1, 1, 0
0, 0, 1
1, 0, 1
0, 1, 1
1, 1, 1
0, 0, 2
1, 0, 2
0, 1, 2
1, 1, 2
(すべての順列に重複がない限り、順序は重要ではありません)。
明らかに私の出力行は間違っています:
System.out.println(i%a + ", " + (i+1)%b + ", " + (i+2)%c);
探している出力を取得するための正しい操作は何ですか?
このコードは少しばかげており、実際に行っていることとはまったく異なりますが、ケースをよく示しています。