Riešenia (skupina D, 6. týždeň)

import java.util.Arrays;

public class Generator {

        private static int[] pole;
        private static int[] mnozina;
        private static boolean[] uzBolo;

        public static void generuj(int odIdx) {
                if (odIdx == pole.length) {
                        spracuj();
                        return;
                }

                for (int i = 0; i < mnozina.length; i++) {
                        if (!uzBolo[i]) {
                                pole[odIdx] = mnozina[i];
                                uzBolo[i] = true;
                                generuj(odIdx + 1);
                                uzBolo[i] = false;
                        }

                }

        }

        private static void spracuj() {
                System.out.println(Arrays.toString(pole));

        }

        public static void main(String[] args) {
                mnozina = new int[] { 9, 18, 633346, 974 };
                int k = mnozina.length;
                pole = new int[k];
                uzBolo = new boolean[k];
                generuj(0);

        }

}
import java.util.Arrays;

public class ZlodejiDvaja {
        private static int pocet = 2;
        private static int[] pole;
        private static int[] ceny;
        private static int rozdiel;

        public static void generuj(int odIdx) {
                if (odIdx == pole.length) {
                        spracuj();
                        return;
                }

                for (int i = 0; i < pocet; i++) {
                        pole[odIdx] = i;
                        generuj(odIdx + 1);

                }

        }

        public static void spracuj() {
                System.out.println(Arrays.toString(pole));
                int minRozdiel = 0;

                for (int i = 0; i < pole.length; i++) {
                        if (pole[i] == 0) {
                                minRozdiel += ceny[i];
                        }
                        if (pole[i] == 1) {
                                minRozdiel -= ceny[i];
                        }
                }

                minRozdiel = Math.abs(minRozdiel);

                if (minRozdiel <= rozdiel) {
                        rozdiel = Math.abs(minRozdiel);
                }
        }

        public static void main(String[] args) {
                ceny = new int[] { 10, 8, 2, 1, 5, 7 };
                pole = new int[ceny.length];
                rozdiel = Integer.MAX_VALUE;
                generuj(0);
                System.out.println(rozdiel);

        }

}
import java.util.Arrays;

public class Zlodeji {
        private static int pocet = 3;
        private static int[] pole;
        private static int[] ceny;
        private static int rozdiel;

        public static void generuj(int odIdx) {
                if (odIdx == pole.length) {
                        spracuj();
                        return;
                }

                for (int i = 0; i < pocet; i++) {
                        pole[odIdx] = i;
                        generuj(odIdx + 1);

                }

        }

        public static void spracuj() {
                //System.out.println(Arrays.toString(pole));

                int[] lupy = new int[pocet];

                for (int i = 0; i < pole.length; i++) {
                        lupy[pole[i]] += ceny[i];
                }

                int maximum = 0;
                int minimum = Integer.MAX_VALUE;
                for (int i = 0; i < lupy.length; i++) {
                        maximum = Math.max(maximum, lupy[i]);
                        minimum = Math.min(minimum, lupy[i]);
                }

                if (rozdiel > (maximum - minimum)) {
                        rozdiel = maximum - minimum;
                }




        }

        public static void main(String[] args) {
                ceny = new int[] { 10, 8, 2, 1, 5, 7 };
                pole = new int[ceny.length];
                rozdiel = Integer.MAX_VALUE;
                generuj(0);
                System.out.println(rozdiel);

        }

}
import java.util.Arrays;

public class Cisla {
        private int[] pole;
        private int[] cisla;
        private boolean[] uzBolo;

        public void generuj(int odIdx) {
                if (odIdx == pole.length) {
                        spracuj();
                        return;
                }

                for (int i = 0; i < cisla.length; i++) {

                        if (!uzBolo[i]) {


                                // ak ma predchadzajuceho a zaroven nie su v konflikte alebo ide
                                // o prve cislo
                                if (((odIdx > 0) && (cisla[i] % pole[odIdx - 1] != 0 && pole[odIdx - 1]
                                                % cisla[i] != 0))
                                                || (odIdx == 0)) {

                                        pole[odIdx] = cisla[i];
                                        uzBolo[i] = true;
                                        generuj(odIdx + 1);
                                        uzBolo[i] = false;
                                }

                        }
                }

        }

        private void spracuj() {
                System.out.println(Arrays.toString(pole));

        }

        public static void main(String[] args) {

                Cisla c = new Cisla();
                c.cisla = new int[] { 2, 4, 3, 5, 9 };
                c.pole = new int[c.cisla.length];
                c.uzBolo = new boolean[c.cisla.length];
                c.generuj(0);
        }
}