Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Дадена е двострано поврзана листа чии што јазли содржат по еден знак (буква). Листата треба да се подели на две резултантни листи, т.ш. во првата резултантна листа ќе бидат бидат сместени самогласките од влезната листа, а во втората – согласките. Јазлите во резултантните листи се додаваат наизменично почнувајќи од почетокот и крајот на влезната листа (т.е. прво се разгледува првиот елемент од листата и се додава во соодветната резултантна листа, па последниот, па вториот итн...)
- Во првиот ред од влезот се дадени буквите од кои се составени јазлите по редослед од влезната листа. Во првиот ред од излезот треба да се испечатат јазлите по редослед од првата резултантна листа (т.е. самогласките), во вториот ред од втората (т.е. согласките) .
- Име на класа (за Java): PodeliSamoglaski
- Делумно решение: Задачата се смета за делумно решена доколку се поминати 7 тест примери.
- Забелешка: При реализација на задачите МОРА да се користат дадените структури, а не да користат помошни структури како низи или сл.
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.Objects;
- public class PodeliSamoglaskiSoglaskiDLL {
- public static boolean eSamoglaska(String bukva){
- return bukva.equals("a") || bukva.equals("e") || bukva.equals("i") || bukva.equals("o") || bukva.equals("u");
- }
- public static DLLNode<String> getMiddle(DLL<String> lista){
- DLLNode<String> slowPok = lista.getFirst();
- DLLNode<String> fastPok = slowPok.succ;
- while(slowPok.succ != null && fastPok != null){
- fastPok = fastPok.succ;
- slowPok = slowPok.succ;
- if(slowPok!=null){
- fastPok = fastPok.succ;
- }
- }
- return slowPok;
- }
- public static void razdeli(DLL<String> lista){
- DLLNode<String> first = lista.getFirst();
- DLLNode<String> last = lista.getLast();
- DLL<String> samoglaski = new DLL<>();
- DLL<String> soglaski = new DLL<>();
- if(lista.length() % 2 == 0) {
- for (int i = 0; i < lista.length() / 2; i++) {
- if (eSamoglaska(first.element)) {
- samoglaski.insertLast(first.element);
- } else {
- soglaski.insertLast(first.element);
- }
- if (eSamoglaska(last.element)) {
- samoglaski.insertLast(last.element);
- } else {
- soglaski.insertLast(last.element);
- }
- first = first.succ;
- last = last.pred;
- }
- }else{
- for (int i = 0; i <= lista.length() / 2; i++) {
- DLLNode<String> sreden = getMiddle(lista);
- if(last == sreden && first == sreden){
- if(eSamoglaska(sreden.element)){
- samoglaski.insertLast(sreden.element);
- }else
- soglaski.insertLast(sreden.element);
- break;
- }
- if (eSamoglaska(first.element)) {
- samoglaski.insertLast(first.element);
- } else {
- soglaski.insertLast(first.element);
- }
- if (eSamoglaska(last.element)) {
- samoglaski.insertLast(last.element);
- } else {
- soglaski.insertLast(last.element);
- }
- first = first.succ;
- last = last.pred;
- }
- }
- System.out.println(samoglaski.toString());
- System.out.println(soglaski.toString());
- }
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String s = br.readLine();
- Integer n = Integer.parseInt(s);
- s = br.readLine();
- String[] pom = s.split(" ");
- DLL<String> lista = new DLL<>();
- for(int i = 0; i < n; i++){
- lista.insertLast(pom[i]);
- }
- razdeli(lista);
- }
- }
Add Comment
Please, Sign In to add comment