C7

Teoreticke cvicenie

public class FibonaciSMemoizaciou {

        /**
         * @param args
         */


        private int[] fibcis = new int[0];

        public int fibonaci(int n) {
                int[] pole = new int[n + 1];
                if (n == 0)
                        return 0;
                pole[0] = 0;
                pole[1] = 1;
                for (int i = 2; i <= n; i++) {
                        pole[i] = pole[i - 1] + pole[i - 2];
                }
                return pole[n];
        }

        public int rekurzuve(int n) {
                fibcis = new int[n + 1];
                return rekurzivne(n, 0);
        }

        private int rekurzivne(int n, int i) {
                if (i == 0)
                        fibcis[0] = 0;
                if (i == 1)
                        fibcis[1] = 1;
                if (i > 1)
                        fibcis[i] = fibcis[i - 1] + fibcis[i - 2];
                if (n == i)
                        return fibcis[i];

                return rekurzivne(n, i + 1);
        }

        public int cyklom() {
                return 0;
        }

        public static void main(String[] args) {
                FibonaciSMemoizaciou vstup = new FibonaciSMemoizaciou();
                System.out.println(vstup.fibonaci(0));
                System.out.println(vstup.rekurzuve(10));
        }

}
 
import java.util.Arrays;

public class Penazenka {

        private boolean[][] pole;

        public void Nakup(int[] mince, int suma) {
                pole = new boolean[suma + 1][mince.length + 1];
                pole[0][0] = true;//nulu viem vzdy zaplatit s pouzitim ziadnej mince
                for (int i = 1; i <= suma; i++) {
                        for (int j = 1; j <= mince.length; j++) {
                                if (i == mince[j - 1])//mince mam v poli mince na indexoch 0,1,2,...n ale predpokladam ze mam aj ziadnu mincu
                                        pole[i][j] = true;
                                if (i - mince[j - 1] >= 0) {//zistujem ci sa nepytam na zaplatenie zapornej sumy lebo tu nemam urcite v tabulke
                                        for (int n = 0; n <= j - 1; n++) {
                                                if (pole[i - mince[j - 1]][n] == true) {//pytam sa ci viem zaplatit s predchadzajucimi mincami sumu nizsiu o aktualnu mincu
                                                        pole[i][j] = true;
                                                        break;
                                                }
                                        }
                                }
                        }
                }
                for(int j=0;j<pole[0].length;j++){
                        for(int i=0;i<pole.length;i++)
                        {
                                System.out.print(pole[i][j]+" ");
                        }
                        System.out.println();
                }
                int stlpec=suma;//suma ktoru sa snazim aktualne zaplatit
                boolean[] vystup=new boolean[mince.length];//true ak minca je pouzita pri plateni
                for(int i=mince.length;i>=0;i--){//spatne rekonstruujem pouzitie minci
                        if(pole[stlpec][i]==true&&i>0){//ak najdem ze dana minca je pouzita pri vyplateni sumy tak ju pouzijem a dalej sa snazim zaplatit mensiu sumu ostatnymi mincami
                                stlpec=stlpec-mince[i-1];
                                vystup[i-1]=true;
                        }
                        if(i==0&&pole[stlpec][i]==false){
                                System.out.println("neda sa");
                                return;
                        }
                }
                System.out.println(Arrays.toString(vystup));
        }

        public static void main(String[] args) {
                int[] pole = { 1, 1, 2, 5 };
                Penazenka a = new Penazenka();
                a.Nakup(pole, 10);

        }

}
 
import java.util.Arrays;

import javax.swing.plaf.basic.BasicScrollPaneUI.VSBChangeListener;

public class NajdlhsiaVybranaRastucaPodpostupnost {

        /**
         * @param args
         */

        public static int[] vsetko(int[] p) {

                int[] d = new int[p.length];
                for (int i = 0; i < p.length; i++) {
                        d[i] = 1;
                        for (int j = 0; j < i; j++)
                                if (p[j] < p[i])
                                        d[i] = Math.max(d[i], d[j] + 1);
                }
                int najdlhsia = 0;

                for (int i = 0; i < d.length; i++)
                        najdlhsia = Math.max(najdlhsia, d[i]);
                int[] hotovo=new int[najdlhsia];

                for(int i=p.length-1; i>=0; i--){
                        if(d[i]==najdlhsia){
                                hotovo[najdlhsia-1]=p[i];
                                najdlhsia=najdlhsia-1;

                        }

                }
                return hotovo;

        }


        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int[] p={5,3,1,4,6,2,8,7};
                System.out.println(Arrays.toString(vsetko(p)));
        }

}