Advertisement
SlavkovB

[АПС] Подели според просек

Sep 16th, 2019
896
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.94 KB | None | 0 0
  1. /**Подели според просек
  2. Дадена е еднострано поврзана листа чии што јазли содржат по еден природен број. Листата треба да се подели на две резултантни листи,  т.ш. во првата листа треба да се сместат сите јазли кои содржат броеви помали или еднакви на просекот на листата (просек на листа претставува математички просек од сите природни броеви кои се јавуваат во листата), а во втората сите јазли кои содржат броеви поголеми од просекот на листата. Јазлите во резултантните листи се додаваат според редоследот по кој се појавуваат
  3. во дадената листа.
  4.  
  5. Во првиот ред од влезот е даден бројот на јазли во листата, а во вториот ред се дадени броевите од кои се составени јазлите по редослед во листата.
  6. Во првиот ред од излезот треба да се испечатат јазлите по редослед од првата резултантна листа (броеви помали или еднакви на просекот на листата), во вториот ред од втората (броеви поголеми од просекот на листата) .
  7.  
  8. Име на класа (за Java): PodeliSporedProsek
  9.  
  10. Забелешка: При реализација на задачите МОРА да се користат дадените структури, а не да користат помошни структури како низи или сл.
  11. Sample input
  12. 5
  13. 4 2 1 5 3
  14.  
  15. 2 1 3
  16. 4 5
  17.  
  18. Sample input
  19. 6
  20. 6 7 9 8 10 10
  21. Sample output
  22. 6 7 8
  23. 9 10 10
  24. */
  25.  
  26.  
  27. //CODE
  28.  
  29.  
  30.  
  31. import java.util.Scanner;
  32.  
  33. class SLLNode<E> {
  34.     protected E element;
  35.     protected SLLNode<E> succ;
  36.  
  37.     public SLLNode(E elem, SLLNode<E> succ) {
  38.         this.element = elem;
  39.         this.succ = succ;
  40.     }
  41.  
  42.     @Override
  43.     public String toString() {
  44.         return element.toString();
  45.     }
  46. }
  47.  
  48. class SLL<E> {
  49.     private SLLNode<E> first;
  50.  
  51.     public SLL() {
  52.         // Construct an empty SLL
  53.         this.first = null;
  54.     }
  55.  
  56.     public void deleteList() {
  57.         first = null;
  58.     }
  59.  
  60.     public int length() {
  61.         int ret;
  62.         if (first != null) {
  63.             SLLNode<E> tmp = first;
  64.             ret = 1;
  65.             while (tmp.succ != null) {
  66.                 tmp = tmp.succ;
  67.                 ret++;
  68.             }
  69.             return ret;
  70.         } else
  71.             return 0;
  72.  
  73.     }
  74.  
  75.     @Override
  76.     public String toString() {
  77.         String ret = new String();
  78.         if (first != null) {
  79.             SLLNode<E> tmp = first;
  80.             ret += tmp + " ";
  81.             while (tmp.succ != null) {
  82.                 tmp = tmp.succ;
  83.                 ret += tmp + " ";
  84.             }
  85.         } else
  86.             ret = "Prazna lista!!!";
  87.         return ret;
  88.     }
  89.  
  90.     public void insertFirst(E o) {
  91.         SLLNode<E> ins = new SLLNode<E>(o, first);
  92.         first = ins;
  93.     }
  94.  
  95.     public void insertAfter(E o, SLLNode<E> node) {
  96.         if (node != null) {
  97.             SLLNode<E> ins = new SLLNode<E>(o, node.succ);
  98.             node.succ = ins;
  99.         } else {
  100.             System.out.println("Dadenot jazol e null");
  101.         }
  102.     }
  103.  
  104.     public void insertBefore(E o, SLLNode<E> before) {
  105.  
  106.         if (first != null) {
  107.             SLLNode<E> tmp = first;
  108.             if (first == before) {
  109.                 this.insertFirst(o);
  110.                 return;
  111.             }
  112.             while (tmp.succ != before)
  113.                 tmp = tmp.succ;
  114.             if (tmp.succ == before) {
  115.                 SLLNode<E> ins = new SLLNode<E>(o, before);
  116.                 tmp.succ = ins;
  117.             } else {
  118.                 System.out.println("Elementot ne postoi vo listata");
  119.             }
  120.         } else {
  121.             System.out.println("Listata e prazna");
  122.         }
  123.     }
  124.  
  125.     public void insertLast(E o) {
  126.         if (first != null) {
  127.             SLLNode<E> tmp = first;
  128.             while (tmp.succ != null)
  129.                 tmp = tmp.succ;
  130.             SLLNode<E> ins = new SLLNode<E>(o, null);
  131.             tmp.succ = ins;
  132.         } else {
  133.             insertFirst(o);
  134.         }
  135.     }
  136.  
  137.     public E deleteFirst() {
  138.         if (first != null) {
  139.             SLLNode<E> tmp = first;
  140.             first = first.succ;
  141.             return tmp.element;
  142.         } else {
  143.             System.out.println("Listata e prazna");
  144.             return null;
  145.         }
  146.     }
  147.  
  148.     public E delete(SLLNode<E> node) {
  149.         if (first != null) {
  150.             SLLNode<E> tmp = first;
  151.             if (first == node) {
  152.                 return this.deleteFirst();
  153.             }
  154.             while (tmp.succ != node && tmp.succ.succ != null)
  155.                 tmp = tmp.succ;
  156.             if (tmp.succ == node) {
  157.                 tmp.succ = tmp.succ.succ;
  158.                 return node.element;
  159.             } else {
  160.                 System.out.println("Elementot ne postoi vo listata");
  161.                 return null;
  162.             }
  163.         } else {
  164.             System.out.println("Listata e prazna");
  165.             return null;
  166.         }
  167.  
  168.     }
  169.  
  170.     public SLLNode<E> getFirst() {
  171.         return first;
  172.     }
  173.  
  174.     public SLLNode<E> find(E o) {
  175.         if (first != null) {
  176.             SLLNode<E> tmp = first;
  177.             while (tmp.element != o && tmp.succ != null)
  178.                 tmp = tmp.succ;
  179.             if (tmp.element == o) {
  180.                 return tmp;
  181.             } else {
  182.                 System.out.println("Elementot ne postoi vo listata");
  183.             }
  184.         } else {
  185.             System.out.println("Listata e prazna");
  186.         }
  187.         return first;
  188.     }
  189.  
  190. }
  191.  
  192. public class PodeliSporedProsek {
  193.     private static void PodeliSporedProsekG1(SLL<Integer> list, int n) {
  194.         SLL<Integer> list2 = new SLL<Integer>();
  195.         SLLNode<Integer> current = list.getFirst();
  196.         int sum = 0;
  197.  
  198.         while (current != null) {
  199.             sum += current.element;
  200.             current = current.succ;
  201.         }
  202.  
  203.         current = list.getFirst();
  204.  
  205.         while (current != null) {
  206.             if (current.element > sum / n) {
  207.                 list2.insertLast(current.element);
  208.                 list.delete(current);
  209.             }
  210.             current = current.succ;
  211.         }
  212.         System.out.println(list);
  213.         System.out.println(list2);
  214.     }
  215.  
  216.     public static void main(String[] args) {
  217.         SLL<Integer> list = new SLL<Integer>();
  218.  
  219.         Scanner input = new Scanner(System.in);
  220.  
  221.         int n = input.nextInt();
  222.  
  223.         for (int i = 0; i < n; i++)
  224.             list.insertLast(input.nextInt());
  225.  
  226.         PodeliSporedProsekG1(list, n);
  227.         input.close();
  228.     }
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement