Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.65 KB | None | 0 0
  1. /*Na tablicy napisane są dwa ciągi zer i jedynek.
  2. Chcemy teraz w każdym z tych ciągów skreślić niektóre cyfry tak,
  3. żeby pozostałe ciągi były takie same oraz były uporządkowane,
  4. tj. po pierwszym wystąpieniu jedynki nie mooże już wystąpić
  5. żadne zero (czyli np. 0000111111). Jaki najdłuższy ciąg może
  6. pozostać na tablicy?
  7. Na wejściu podane są długości obu ciągów oraz same ciągi np:
  8.  
  9. 4 4
  10. 0 1 0 1
  11. 0 0 1 1
  12.  
  13. daje wynik:
  14. 3
  15. [ bo taki sam ciąg to : 0 1 1 i powstaje on z pierwszego
  16. poprzez skreślenie ostatniego 0 oraz z drugiego poprzez
  17. skreślenie pierwszego zera]
  18.  
  19. inny przykład:
  20. 5 5
  21. 0 1 0 1 1
  22. 0 1 1 0 0
  23. daje wynik:
  24. 3
  25. [ ciąg: 0 1 1]
  26.  
  27. }*/
  28.  
  29. import java.util.*;
  30.  
  31. public class lab02 {
  32.     public static void main(String[] args) {
  33.         Scanner in = new Scanner(System.in);
  34.  
  35.         System.out.println("Podaj dlugosci 1. ciagu znakow");
  36.         int size1 = in.nextInt();
  37.         System.out.println("Podaj 1. ciag znakow o dlugosci: " + size1 + " skladajacy sie z 0 lub 1");
  38.         int[] chain1 = new int[size1];
  39.         for (int it = 0; it < size1; it++) {
  40.             int temp = in.nextInt();
  41.             if ((temp == 0) || (temp == 1))
  42.                 chain1[it] = temp;
  43.         }
  44.  
  45.         System.out.println("Podaj dlugosci 2. ciagu znakow");
  46.         int size2 = in.nextInt();
  47.         System.out.println("Podaj 2. ciag znakow o dlugosci: " + size2 + " skladajacy sie z 0 lub 1");
  48.         int[] chain2 = new int[size2];
  49.         for (int it = 0; it < size2; it++) {
  50.             int temp = in.nextInt();
  51.             if ((temp == 0) || (temp == 1))
  52.                 chain2[it] = temp;
  53.         }
  54.  
  55.         // MAX CIAG Z 1. //
  56.         ArrayList chain1Zero = new ArrayList(); // maximum 0 i dopełnienie 1
  57.         ArrayList chain1One = new ArrayList(); // maximum 1 i dopełnienie 0
  58.  
  59.         int i = 0;
  60.         int j = size1 - 1;
  61.         int lastIndex = 0;
  62.  
  63.         while (i < size1 - 1) { // maximum 0 z pierwszego ciagu
  64.             if (chain1[i] == 0) {
  65.                 chain1Zero.add(chain1[i]);
  66.                 lastIndex = i;
  67.                 i++;
  68.             } else {
  69.                 i++;
  70.             }
  71.         }
  72.  
  73.         i = lastIndex;
  74.         while (i < size1 - 1) { // maximum 0 dopelniamy 1
  75.             if (chain1[i] == 1) {
  76.                 chain1Zero.add(chain1[i]);
  77.                 lastIndex = i;
  78.                 i++;
  79.             } else {
  80.                 i++;
  81.             }
  82.         }
  83.  
  84.         lastIndex = 0;
  85.         while (j > 0) {
  86.             if (chain1[j] == 1) { // maximum 1 z pierwszego ciagu
  87.                 chain1One.add(chain1[j]);
  88.                 lastIndex = j;
  89.                 j--;
  90.             } else {
  91.                 j--;
  92.             }
  93.         }
  94.  
  95.         j = lastIndex;
  96.         while (j > 0) {
  97.             if (chain1[j] == 1) { // maximum 1 dopelniam 0
  98.                 chain1One.add(chain1[j]);
  99.                 lastIndex = j;
  100.                 j--;
  101.             } else {
  102.                 j--;
  103.             }
  104.         }
  105.  
  106.         int maxSize1 = chain1One.size() > chain1Zero.size() ? chain1One.size() : chain1Zero.size();
  107.  
  108.         // MAX CIAG Z 2. //
  109.         ArrayList chain2Zero = new ArrayList();
  110.         ArrayList chain2One = new ArrayList();
  111.  
  112.         i = 0;
  113.         j = size2 - 1;
  114.         lastIndex = 0;
  115.  
  116.         while (i < size2 - 1) { // maximum 0 z druiego ciagu
  117.             if (chain2[i] == 0) {
  118.                 chain2Zero.add(chain2[i]);
  119.                 lastIndex = i;
  120.                 i++;
  121.             } else {
  122.                 i++;
  123.             }
  124.         }
  125.  
  126.         i = lastIndex;
  127.         while (i < size2 - 1) { // maximum 0 dopelniamy 1
  128.             if (chain2[i] == 1) {
  129.                 chain2Zero.add(chain2[i]);
  130.                 lastIndex = i;
  131.                 i++;
  132.             } else {
  133.                 i++;
  134.             }
  135.         }
  136.  
  137.         lastIndex = 0;
  138.         while (j > 0) {
  139.             if (chain2[j] == 1) { // maximum 1 z pierwszego ciagu
  140.                 chain2One.add(chain2[j]);
  141.                 lastIndex = j;
  142.                 j--;
  143.             } else {
  144.                 j--;
  145.             }
  146.         }
  147.  
  148.         j = lastIndex;
  149.         while (j > 0) {
  150.             if (chain2[j] == 1) { // maximum 1 dopelniam 0
  151.                 chain2One.add(chain2[j]);
  152.                 lastIndex = j;
  153.                 j--;
  154.             } else {
  155.                 j--;
  156.             }
  157.         }
  158.  
  159.         int maxSize2 = chain1One.size() > chain1Zero.size() ? chain1One.size() : chain1Zero.size();
  160.  
  161.         int maxSize = maxSize1 < maxSize2 ? maxSize1 : maxSize2;
  162.         System.out.println("\n\nMax. dlugosc podciagu niemalejacego: " + maxSize + "\n\n");
  163.  
  164.     }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement