__krzysiek85 napisał(a)
Polecam rozwiązanie rekurencyjne:
import java.util.Arrays;
public class Kombinacje {
private static String paraToString(int a, int b){
return "(" + a + ", " + b + ")";
}
public static void kombinacje(int[] t){
if (t == null) throw new NullPointerException();
if (t.length == 0 || (t.length & 1) == 1) throw new IllegalArgumentException();
kom("", t);
}
/*przed - napis z ustalonymi juz parami
t - liczby bez pary */
private static void kom(String przed, int[] t){
if (t.length == 2)
System.out.println(przed + paraToString(t[0], t[1])); //wypisujemy gdy zejdziemy z rekursja na sam dol
else {
int[] t2 = Arrays.copyOfRange(t, 2, t.length); //kopia wszystkiego oprocz pierwszych dwoch
for(int i = 1; i < t.length; i++){
kom(przed + paraToString(t[0], t[i]), t2); //rekurencja
if (i - 1 < t2.length)
t2[i - 1] = t[i];
}
}
}
public static void main(String[] args) {
Kombinacje.kombinacje(new int[] {1,2,3,4,5,6,7,8});
}
}
To jest dokładnie to o co mi chodziło :-) :-) :-) :-)
Wielkie dzięki __krzysiek85
[browar]