C6

Utorok

package PAZ1b.cvicenie06;

import java.util.Arrays;

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

        private int[] vyber;

        private String[] mnozina;

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

        private void spracuj() {

                for (int i = 0; i < vyber.length; i++) {
                        int indexVMnozine = vyber[i];
                        System.out.print(mnozina[indexVMnozine] + " ");

                        // System.out.print(mnozina[pole[i]]);
                }
                System.out.println();
        }

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

        private void generuj(int odIndexu) {
                if (odIndexu == vyber.length) {
                        spracuj();
                        return;
                }

                for (int i = 0; i < mnozina.length; i++) {
                        vyber[odIndexu] = i;
                        generuj(odIndexu + 1);
                        // Eventualne mozeme vratit obsah pola do povodneho stavu - ale je
                        // to zbytocne...
                        // pole[odIndexu] = 0;
                }
        }

        /**
         * Nastartuje generovanie
         */

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

        public GeneratorZLubovolnejMnoziny(int k, String[] mnozina) {
                vyber = new int[k];
                this.mnozina = mnozina;
        }

        public static void main(String[] args) {
                String[] mnozina = { "Marek", "Ali", "Simona", "Attila", "Sophia", "Timea" };

                GeneratorZLubovolnejMnoziny g = new GeneratorZLubovolnejMnoziny(6, mnozina);
                g.generuj();
        }
}

Stvrtok

package PAZ1b.cvicenie06;

import java.util.Arrays;

public class RozdelLupDvom {

        private int[] lup;
        /*
         * pole vyber je pole 0 a 1 ktore reprezentuju ktory zlodej dostane predmet
         */

        private int[] vyber;

        private int topRozdiel = Integer.MAX_VALUE;
        private int[] topVyber;

        private void spracuj() {
                int prvy = 0;
                int druhy = 0;

                for (int i = 0; i < vyber.length; i++) {
                        if (vyber[i] == 0) {
                                prvy += lup[i];
                        }
                        if (vyber[i] == 1) {
                                druhy += lup[i];
                        }
                }

                int rozdiel = Math.abs(prvy - druhy);
                System.out.println(Arrays.toString(vyber) + " " + rozdiel);

                if (rozdiel < topRozdiel) {
                        topRozdiel = rozdiel;
                        topVyber = Arrays.copyOf(vyber, vyber.length);
                }
        }

        private void generuj(int odIndex) {
                if (odIndex == vyber.length) {
                        spracuj();
                        return;
                }

                vyber[odIndex] = 0;
                generuj(odIndex + 1);

                vyber[odIndex] = 1;
                generuj(odIndex + 1);

        }

        public void generuj() {
                // priprava pred generovanim
                generuj(0);
                // po generovani
                System.out.println("najlepsi vyber je: " + Arrays.toString(topVyber));
                System.out.println("rozdiel pri tomto vybere je: "+ topRozdiel);
        }

        public RozdelLupDvom(int[] lup) {
                this.lup = lup;
                vyber = new int[lup.length];
                topVyber = new int[lup.length];
        }

        public static void main(String[] args) {
                int[] lup = { 50, 150, 600, 200 };
                RozdelLupDvom rl = new RozdelLupDvom(lup);
                rl.generuj();
        }
}
 
package PAZ1b.cvicenie06;

import java.util.Arrays;

public class RozdelLupKZlodejom {

        private int[] lup;
        private int pocetZlodejov;
        /*
         * pole vyber je pole 0 a 1 ktore reprezentuju ktory zlodej dostane predmet
         */

        private int[] vyber;

        private int topRozdiel = Integer.MAX_VALUE;
        private int[] topVyber;

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

                int[] lupItehoZlodeja = new int[pocetZlodejov];

                for (int i = 0; i < vyber.length; i++) {
                        int ktoremuZlodejovi = vyber[i];
                        lupItehoZlodeja[ktoremuZlodejovi] += lup[i];
                }

                // tu ma byt naprogramovana nova lepsia matematika ;)

//              int rozdiel = Math.abs(prvy - druhy);
//              System.out.println(Arrays.toString(vyber) + " " + rozdiel);
//
//              if (rozdiel < topRozdiel) {
//                      topRozdiel = rozdiel;
//                      topVyber = Arrays.copyOf(vyber, vyber.length);
//              }
        }

        private void generuj(int odIndex) {
                if (odIndex == vyber.length) {
                        spracuj();
                        return;
                }

                for (int i = 0; i < pocetZlodejov; i++) {
                        vyber[odIndex] = i;
                        generuj(odIndex + 1);
                }

        }

        public void generuj() {
                // priprava pred generovanim
                generuj(0);
                // po generovani
                System.out.println("najlepsi vyber je: " + Arrays.toString(topVyber));
                System.out.println("rozdiel pri tomto vybere je: " + topRozdiel);
        }

        public RozdelLupKZlodejom(int[] lup, int pocetZlodejov) {
                this.lup = lup;
                this.pocetZlodejov = pocetZlodejov;
                vyber = new int[lup.length];
                topVyber = new int[lup.length];
        }

        public static void main(String[] args) {
                int[] lup = { 50, 150, 600, 200 };
                RozdelLupKZlodejom rl = new RozdelLupKZlodejom(lup, 3);
                rl.generuj();
        }
}
 
package PAZ1b.cvicenie06;

import java.util.Arrays;

public class GeneratorBezOpakovania {
        /**
         * Pole v ktorom generujeme variacie
         */

        private int[] pole;

        /**
         * Pole, v ktorom uchovavame, ci sa hodnota i (i=1..n) nachadza v poli pole.
         */

        private boolean[] uzBolo;

        /**
         * Urcuje velkost mnoziny, z ktorej vytvarame variacie bez opakovania ({1, ...,
         * n})
         */

        private int n;

        private int[] cisla;

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

                int[] coIdemVypisat = new int[n];

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

//              for (int i = 1; i < coIdemVypisat.length; i++) {
//                      if (coIdemVypisat[i] % coIdemVypisat[i - 1] == 0 || coIdemVypisat[i - 1] % coIdemVypisat[i] == 0) {
//                              System.out.println("zla "+ Arrays.toString(coIdemVypisat));
//                              return;
//                      }
//              }
//
                System.out.println(Arrays.toString(coIdemVypisat));
        }

        private void generuj(int odIndexu) {
                // Ak sme vygenerovali vsetky hodnoty v poli, tak pole vypiseme
                if (odIndexu == pole.length) {
                        spracuj();
                        return;
                }

                for (int i = 0; i < n; i++) {
                        // Cislo i ulozime do pola, iba ak sa este nenachadza na indexoch
                        // 0..(odIndexu-1)
                        if (!uzBolo[i]) {
                                if (odIndexu >= 1) {
                                        int naAktPoz = cisla[i];
                                        int naPredchPoz = cisla[pole[odIndexu-1]];
                                        if(naAktPoz % naPredchPoz == 0 || naPredchPoz % naAktPoz == 0) {
                                                continue;
                                        }
                                }

                                // Poznacime si pridanie hodnoty i do pola
                                uzBolo[i] = true;
                                pole[odIndexu] = i;
                                // Generujeme variacie bez opakovania od indexu odIndexu+1
                                generuj(odIndexu + 1);
                                // pole[odIndexu] = 0;
                                // Poznacime si odobratie hodnoty i z pola
                                uzBolo[i] = false;
                        }
                }
        }

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

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

                // Ulozime si parameter n
                this.n = cisla.length;
                // Vytvorime pole, do ktoreho budeme generovat variacie
                pole = new int[cisla.length];
                // Vytvorime pole s indexami 0..n, v ktorom si pre cisla v rozsahu 1..n
                // budeme pamatat, ci sme ich pouzili
                uzBolo = new boolean[n];
        }

        public static void main(String[] args) {
                int[] cisla = { 8, 4, 3, 5 };
                GeneratorBezOpakovania g = new GeneratorBezOpakovania(cisla);
                g.generuj();
        }
}