Untitled

 avatar
unknown
plain_text
2 years ago
3.9 kB
5
Indexable
public class Uloha {
    public static void main(String[] args) {
        double[] kurzyPole = {3.58, 2.07, 2.41, 3.19, 3.44, 4.52, 1.43, 1.32, 1.29, 9.24};
        double[] castkyPole = {0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20,};
        List<BigDecimal> kurzyList = new ArrayList<>();
        List<BigDecimal> castkyList = new ArrayList<>();

        for (int i = 0; i < kurzyPole.length; i++) {
            kurzyList.add(i, BigDecimal.valueOf(kurzyPole[i]).setScale(2, RoundingMode.HALF_EVEN));
        }

        for (int i = 0; i < castkyPole.length; i++) {
            castkyList.add(i, BigDecimal.valueOf(castkyPole[i]).setScale(2, RoundingMode.HALF_EVEN));
        }

        for (BigDecimal bigDecimal : kurzyList) {
            if (bigDecimal.compareTo(BigDecimal.ONE) <= 0) {
                System.out.println("Neplatny input! Kurz je rovny alebo mensi ako 1.");
                return;
            }
        }

        for (BigDecimal bigDecimal : castkyList) {
            if (bigDecimal.compareTo(BigDecimal.ZERO) <= 0) {
                System.out.println("Neplatny input! Nulova castka.");
                return;
            }
        }
        List<Skupina> skupiny = new ArrayList<>();

        Vysledky.setCelkovaVyhra(BigDecimal.ZERO);
        Vysledky.setCelkovyVklad(BigDecimal.ZERO);

        for (int aku = 1; aku < castkyList.size() + 1; aku++) {
            List<int[]> kombo;
            BigDecimal vyhraSkupinaSum = BigDecimal.ZERO;

            kombo = genKombinacie(kurzyList.size(), aku);

            for (int[] ints : kombo) {
                BigDecimal kurz = BigDecimal.ONE;


                for (int j : ints) {
                    kurz = kurz.multiply(kurzyList.get(j));
                }

                Skupina skupina = new Skupina();
                skupina.setNazov(intsToString(ints));
                skupina.setKurz(kurz.setScale(2, RoundingMode.HALF_EVEN));
                skupina.setCastka(castkyList.get(aku - 1));
                skupina.setVyhra(skupina.getKurz().multiply(castkyList.get(aku - 1)));
                skupiny.add(skupina);

                vyhraSkupinaSum = (vyhraSkupinaSum.add(skupina.getVyhra()));

                Vysledky.setCelkovyVklad(Vysledky.getCelkovyVklad().add(castkyList.get(aku - 1)));
            }
            Vysledky.setCelkovaVyhra(Vysledky.getCelkovaVyhra().add(vyhraSkupinaSum).setScale(4,RoundingMode.HALF_EVEN));

        }
        Vysledky.setCelkovyKurz(Vysledky.getCelkovaVyhra().divide(Vysledky.getCelkovyVklad(), RoundingMode.HALF_EVEN));

        for (Skupina skupina : skupiny) {
            System.out.println(skupina.toString());
        }
        Vysledky vysledky = new Vysledky();
        System.out.println(vysledky);
    }

    public static List<int[]> genKombinacie(int pocetPrvkov, int pocetMiest) {
        List<int[]> kombinacie = new ArrayList<>();
        int[] kombinacia = new int[pocetMiest];
        for (int i = 0; i < pocetMiest; i++) {
            kombinacia[i] = i;
        }
        while (kombinacia[pocetMiest - 1] < pocetPrvkov) {
            kombinacie.add(kombinacia.clone());
            int c = pocetMiest - 1;
            while (c != 0 && kombinacia[c] == pocetPrvkov - pocetMiest + c) {
                c--;
            }
            kombinacia[c]++;
            for (int i = c + 1; i < pocetMiest; i++) {
                kombinacia[i] = kombinacia[i - 1] + 1;
            }
        }
        return kombinacie;
    }

    private static String intsToString(int[] ints) {
        char[] charsNazov = new char[ints.length];
        for (int i = 0; i < charsNazov.length; i++) {
            charsNazov[i] = (char) (ints[i] + 65);
        }
        return Arrays.toString(charsNazov).replaceAll("]","").replaceAll("\\[", "").replaceAll("[\\\\, ]","");
    }
}
Editor is loading...