A6

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Generator {
        /**
         * Pole, v ktorom generujeme postupnost
         */

        private int[] pole;

        private char[] prvky;

        /**
         * Spracuje hodnoty v postupnosti - vypise ich
         */

        private void vypis() {
                char[] naozajstne = new char[pole.length];
                for (int i = 0; i < pole.length; i++)
                        naozajstne[i] = prvky[pole[i]];

                System.out.println(Arrays.toString(naozajstne));
        }

        /**
         * Generuje variacie s opakovanim v podpoli pocnuc indexom odIndexu
         */

        private void generuj(int odIndexu) {
                if (odIndexu == pole.length) {
                        vypis();
                        return;
                }

                for (int i = 0; i < prvky.length; i++) {
                        pole[odIndexu] = i;
                        generuj(odIndexu + 1);
                }
        }

        /**
         * Nastartuje generovanie
         */

        public void generuj() {
                generuj(0);
        }

        public Generator(int k, Set<Character> mnozina) {
                pole = new int[k];
                prvky = new char[mnozina.size()];
                int idx = 0;
                for (Character cislo : mnozina) {
                        prvky[idx] = cislo;
                        idx++;
                }
        }

        public static void main(String[] args) {
                Set<Character> m = new HashSet<Character>();
                m.add('a');
                m.add('o');
                m.add('l');
                m.add('k');
                Generator g = new Generator(3, m);
                g.generuj();
        }
}
import java.util.Arrays;

public class Lup {

        private int[] ceny;
        private int[] vlastnici;

        private int najRozdiel;
        private int[] najRozdelenie;

        private int lupPrveho;
        private int lupDruheho;

        private void spracuj() {
                /*
                int lupPrveho = 0;
                int lupDruheho = 0;
                for (int i=0; i<ceny.length; i++)
                        if (vlastnici[i] == 0)
                                lupPrveho += ceny[i];
                        else
                                lupDruheho += ceny[i];
                */

                int rozdiel = Math.abs(lupDruheho - lupPrveho);
                if (rozdiel < najRozdiel) {
                        najRozdiel = rozdiel;
                        najRozdelenie = vlastnici.clone();
                }
        }

        private void generuj(int odPredmetu) {
                if (odPredmetu == vlastnici.length) {
                        spracuj();
                        return;
                }

                vlastnici[odPredmetu] = 0;
                lupPrveho += ceny[odPredmetu];
                generuj(odPredmetu+1);
                lupPrveho -= ceny[odPredmetu];

                vlastnici[odPredmetu] = 1;
                lupDruheho += ceny[odPredmetu];
                generuj(odPredmetu+1);
                lupDruheho -= ceny[odPredmetu];
        }

        public int[] rozdel() {
                najRozdiel = Integer.MAX_VALUE;
                lupPrveho = 0;
                lupDruheho = 0;
                generuj(0);
                return najRozdelenie;
        }

        public Lup(int[] ceny) {
                this.ceny = ceny;
                vlastnici = new int[ceny.length];
        }

        public static void main(String[] args) {
                int[] ceny = { 20, 300, 200, 100, 10 };
                Lup batoh = new Lup(ceny);
                System.out.println(Arrays.toString(batoh.rozdel()));
        }

}
import java.io.File;
import java.util.Arrays;
import java.util.Scanner;

public class Sklad {

        private int[][] zakazane;
        private int n;
        private int[] vybery;
        private int maximum;

        private boolean vyhovuje() {
                for (int i = 0; i < zakazane.length; i++) {
                        int x = zakazane[i][0];
                        int y = zakazane[i][1];
                        if ((vybery[x] == 1) && (vybery[y] == 1))
                                return false;
                }
                return true;
        }

        private void spracuj() {
                if (!vyhovuje())
                        return;
                int sucetPola = 0;

                for (int i = 0; i < vybery.length; i++)
                        sucetPola += vybery[i];

                if (maximum < sucetPola)
                        maximum = sucetPola;

                System.out.println(Arrays.toString(vybery));
        }

        private void generuj(int odIdx) {
                if (odIdx == vybery.length) {
                        spracuj();
                        return;
                }

                vybery[odIdx] = 0;
                generuj(odIdx + 1);

                vybery[odIdx] = 1;
                generuj(odIdx + 1);
        }

        public int maximalneSpolu() {
                vybery = new int[n];
                generuj(0);
                return maximum;
        }

        public Sklad(File vstup) {
                Scanner s = null;
                try {
                        s = new Scanner(vstup);
                        // Nacitame pocet latok a pocet zakazanych dvojic
                        n = s.nextInt();
                        int m = s.nextInt();
                        // Nacitame zakazane dvojice
                        zakazane = new int[m][2];
                        for (int i = 0; i < m; i++) {
                                zakazane[i][0] = s.nextInt();
                                zakazane[i][1] = s.nextInt();
                        }
                } catch (Exception e) {
                        System.err.println("Chyba");
                } finally {
                        if (s != null)
                                s.close();
                }
        }

        /**
         * @param args
         */

        public static void main(String[] args) {
                Sklad upjs = new Sklad(new File("sklad.txt"));
                System.out.println(upjs.maximalneSpolu());
        }
}
import java.io.File;
import java.util.Arrays;
import java.util.Scanner;

public class Sklad {

        private int[][] zakazane;
        private int n;
        private int[] vybery;
        private int maximum;
        int sucetPola = 0;

        private boolean vyhovuje() {
                for (int i = 0; i < zakazane.length; i++) {
                        int x = zakazane[i][0];
                        int y = zakazane[i][1];
                        if ((vybery[x] == 1) && (vybery[y] == 1))
                                return false;
                }
                return true;
        }

        private void spracuj() {
                if (!vyhovuje())
                        return;

                if (maximum < sucetPola)
                        maximum = sucetPola;

                System.out.println(Arrays.toString(vybery));
        }

        private void generuj(int odIdx) {
                if (odIdx == vybery.length) {
                        spracuj();
                        return;
                }

                vybery[odIdx] = 0;
                generuj(odIdx + 1);

                vybery[odIdx] = 1;
                sucetPola++;
                if (vyhovuje()) {

                        generuj(odIdx + 1);

                }

                // bonus- vratenie do povodneho stavu
                vybery[odIdx] = 0;
                sucetPola--;

        }

        public int maximalneSpolu() {
                vybery = new int[n];
                generuj(0);
                return maximum;
        }

        public Sklad(File vstup) {
                Scanner s = null;
                try {
                        s = new Scanner(vstup);
                        // Nacitame pocet latok a pocet zakazanych dvojic
                        n = s.nextInt();
                        int m = s.nextInt();
                        // Nacitame zakazane dvojice
                        zakazane = new int[m][2];
                        for (int i = 0; i < m; i++) {
                                zakazane[i][0] = s.nextInt();
                                zakazane[i][1] = s.nextInt();
                        }
                } catch (Exception e) {
                        System.err.println("Chyba");
                } finally {
                        if (s != null)
                                s.close();
                }
        }

        /**
         * @param args
         */

        public static void main(String[] args) {
                Sklad upjs = new Sklad(new File("sklad.txt"));
                System.out.println(upjs.maximalneSpolu());
        }
}
import java.util.Arrays;

public class Telocvik {

        private int[] cisla;
        private int[] rad;

        public Telocvik(int[] cisla) {
                this.cisla = cisla;
        }

        public boolean mozeByt(int idx, int hodnota) {
                for (int i = 0; i <= idx - 1; i++) {
                        if (rad[i] == hodnota)
                                return false;

                }
                if (idx > 0)
                        if (rad[idx - 1] % hodnota == 0
                                        || hodnota % rad[idx - 1] == 0) {
                                return false;
                        }
                return true;
        }

        private void generuj(int odIdx) {
                if (odIdx == rad.length) {
                        spracuj();
                        return;
                }
                for (int i = 0; i < cisla.length; i++) {
                        if (mozeByt(odIdx, cisla[i])) {
                                rad[odIdx] = cisla[i];
                                generuj(odIdx + 1);
                        }
                }

        }

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

        public void generujRady() {
                rad = new int[cisla.length];
                generuj(0);
        }

        /**
         * @param args
         */

        public static void main(String[] args) {
                int[] cisla = { 3, 5, 7, 4, 8, 2 };
                Telocvik tv = new Telocvik(cisla);
                tv.generujRady();
        }

}