Advertisement
brsjak

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

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