Java programozás – 2017 májusi idegen nyelvű emelt informatika érettségi – fürdő

A feladat leírását, melynek a megoldását közzéteszem innen töltheted le. Ez a megoldás listával dolgozik. Most idő hiányában nem szedtem szét két változatra a megoldásom, bizonyos feladatrészeket 2 módon is megoldottam.
Adattároló osztály:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_17majma_furdo;

public class Mozgas
{
    int azon;
    int honnan;
    int irany;
    int ora;
    int perc;
    int mperc;
    
    String ido;
    int masodpercek;
    
    public Mozgas(String[] tomb) 
    {
        azon = Integer.parseInt(tomb[0]);
        honnan = Integer.parseInt(tomb[1]);
        irany = Integer.parseInt(tomb[2]);
        ora = Integer.parseInt(tomb[3]);
        perc = Integer.parseInt(tomb[4]);
        mperc = Integer.parseInt(tomb[5]);
        
        ido = String.format("%d:%d:%d", ora, perc, mperc);
        masodpercek = ora * 3600 + perc * 60 + mperc;
    }

    @Override
    public String toString() {
        return "Mozgas{" + "azon=" + azon + ", honnan=" + honnan + ", irany="
                + irany + ", ora=" + ora + ", perc=" + perc + ", mperc="
                + mperc + ", ido=" + ido + ", masodpercek=" + masodpercek + '}';
    }
    
    public boolean oltozobolKi()
    {
        return honnan == 0 && irany == 1;
    }

    public boolean oltozobeBe()
    {
        return honnan == 0 && irany == 0;
    }

    public boolean szaunabaBe()
    {
        return honnan == 2 && irany == 0;
    }

    public boolean szaunabolKi()
    {
        return honnan == 2 && irany == 1;
    }
}

A feladat megoldása:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_17majma_furdo;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

public class Webotlet_17majma_furdo;
{

    public static void main(String[] args)
    {
        ArrayList<Mozgas> mozgasok = new ArrayList<>();

        try
        {
            RandomAccessFile raf = new RandomAccessFile("furdoadat.txt", "r");
            String sor;
            for (sor = raf.readLine(); sor != null; sor = raf.readLine())
            {
                mozgasok.add(new Mozgas(sor.split(" ")));
            }
            raf.close();
        }
        catch (IOException e)
        {
            System.out.println("HIBA");
        }

//        for (int i = 0; i < mozgasok.size(); i++)
//        {
//            System.out.println(mozgasok.get(i).toString());
//        }
        System.out.println("2. feladat");
        System.out.format("Az elso vendeg %s-kor lepett ki az oltozobol.%n",
                mozgasok.get(0).ido);

        for (int i = mozgasok.size() - 1; i >= 0; i--)
        {
            if (mozgasok.get(i).honnan == 0 && mozgasok.get(i).irany == 1)
            {
                System.out.format("Az utolso vendeg %s-kor lepett ki az "
                        + "oltozobol.%n", mozgasok.get(i).ido);
                break;
            }
        }
        // 2. megoldas
        int utolso = -1;
        for (int i = 0; i < mozgasok.size(); i++)
        {
            if (mozgasok.get(i).honnan == 0 && mozgasok.get(i).irany == 1)
            {
                utolso = i;
            }
        }
        System.out.format("Az utolso vendeg %s-kor lepett ki az oltozobol.%n",
                mozgasok.get(utolso).ido);

        System.out.println("3. feladat");
// 1. változat listával
        ArrayList<Integer> azonositok = new ArrayList<>();

        for (int i = 0; i < mozgasok.size(); i++)
        {
            if (!azonositok.contains(mozgasok.get(i).azon))
            {
                azonositok.add(mozgasok.get(i).azon);
            }
        }

        int[] azonositokDb = new int[azonositok.size()];

        for (int i = 0; i < mozgasok.size(); i++)
        {
            azonositokDb[azonositok.indexOf(mozgasok.get(i).azon)]++;
        }

        int db4 = 0;
        for (int i = 0; i < azonositokDb.length; i++)
        {
            if (azonositokDb[i] == 4)
            {
                db4++;
            }
        }
        System.out.format("A furdoben %d vendeg jart csak egy reszlegben%n", db4);

// 2. változat HashMap-pel
        System.out.println("-----");
        System.out.println("2. valtozat");
        HashMap<Integer, Integer> eredmenyekDb = new HashMap<>();

        for (int i = 0; i < mozgasok.size(); i++)
        {
            if (eredmenyekDb.containsKey(mozgasok.get(i).azon))
            {
                eredmenyekDb.put(mozgasok.get(i).azon,
                        eredmenyekDb.get(mozgasok.get(i).azon) + 1);
            } else
            {
                eredmenyekDb.put(mozgasok.get(i).azon, 1);
            }
        }

        int vendeg4 = 0;
        for (Integer key : eredmenyekDb.keySet())
        {
            if (eredmenyekDb.get(key) == 4)
            {
                vendeg4++;
            }
        }
        System.out.format("A furdoben %d vendeg jart csak egy reszlegben%n", vendeg4);

        System.out.println("4. feladat");

        int maxHossz = 0;
        int maxVendeg = -1;
        for (int i = 0; i < mozgasok.size() - 1; i++)
        {
            for (int j = i + 1; j < mozgasok.size(); j++)
            {
                if (mozgasok.get(i).oltozobolKi()
                        && mozgasok.get(j).oltozobeBe())
                {
                    int hossz = mozgasok.get(j).masodpercek - mozgasok.get(i).masodpercek;
                    if (hossz > maxHossz)
                    {
                        maxHossz = hossz;
                        maxVendeg = mozgasok.get(i).azon;
                    }
                    break;
                }
            }
        }

        System.out.println("A legtobb idot eltolto vendeg:");
        System.out.format("%d. vendeg %s%n", maxVendeg, idoformatum(maxHossz));

        int erkezes = 0;

        for (int i = 0; i < mozgasok.size() - 1; i++)
        {
            if (mozgasok.get(i).oltozobolKi())
            {
                // kiszámolom az i. és erkezes. időkülönbség
                // összehasonlítom a max-szal

                erkezes = i + 1;
            }
        }
        System.out.println("5. feladat");
        int db6 = 0;
        int db9 = 0;
        int db16 = 0;

        for (int i = 0; i < mozgasok.size(); i++)
        {
            if (mozgasok.get(i).oltozobolKi())
            {
                if (mozgasok.get(i).ora < 9)
                {
                    db6++;
                }
                else if (mozgasok.get(i).ora < 16)
                {
                    db9++;
                }
                else
                {
                    db16++;
                }
            }
        }
        
        System.out.println("6-9 ora kozott " + db6 + " vendeg");
        System.out.println("9-16 ora kozott " + db9 + " vendeg");
        System.out.println("16-20 ora kozott " + db16 + " vendeg");

        System.out.println("6. feladat");
        // 1. változat, többszörös megszámlálás listával
        int[] szaunaIdok = new int[azonositok.size()];

        for (int i = 0; i < mozgasok.size() - 1; i++)
        {
            for (int j = i + 1; j < mozgasok.size(); j++)
            {
                if (mozgasok.get(i).szaunabaBe()
                        && mozgasok.get(j).szaunabolKi())
                {
                    int hossz = mozgasok.get(j).masodpercek - mozgasok.get(i).masodpercek;
                    szaunaIdok[azonositok.indexOf(mozgasok.get(i).azon)] += hossz;
                    break;
                }
            }
        }

        try
        {
            RandomAccessFile ki = new RandomAccessFile("szauna.txt", "rw");
            ki.setLength(0);
            for (int i = 0; i < azonositok.size(); i++)
            {
                if (szaunaIdok[i] > 0)
                {
                    ki.writeBytes(azonositok.get(i) + " " + szaunaIdok[i] + "\n");
                }
            }
            ki.close();
        }
        catch (IOException e)
        {
            System.out.println("HIBA");
        }

        System.out.println("7. feladat");
        // 1. változat listával
        ArrayList<Integer> uszoda = new ArrayList<>();
        ArrayList<Integer> szauna = new ArrayList<>();
        ArrayList<Integer> gyogyviz = new ArrayList<>();
        ArrayList<Integer> strand = new ArrayList<>();

        for (int i = 0; i < mozgasok.size(); i++)
        {
            if (mozgasok.get(i).honnan == 1 && mozgasok.get(i).irany == 0)
            {
                if (!uszoda.contains(mozgasok.get(i).azon))
                {
                    uszoda.add(mozgasok.get(i).azon);
                }
            }
            else if (mozgasok.get(i).honnan == 2 && mozgasok.get(i).irany == 0)
            {
                if (!szauna.contains(mozgasok.get(i).azon))
                {
                    szauna.add(mozgasok.get(i).azon);
                }
            }
            else if (mozgasok.get(i).honnan == 3 && mozgasok.get(i).irany == 0)
            {
                if (!gyogyviz.contains(mozgasok.get(i).azon))
                {
                    gyogyviz.add(mozgasok.get(i).azon);
                }
            }
            else if (mozgasok.get(i).honnan == 4 && mozgasok.get(i).irany == 0)
            {
                if (!strand.contains(mozgasok.get(i).azon))
                {
                    strand.add(mozgasok.get(i).azon);
                }
            }
        }
        
        System.out.println("Uszoda: " + uszoda.size());
        System.out.println("Szaunak: " + szauna.size());
        System.out.println("Gyogyvizes medencek: " + gyogyviz.size());
        System.out.println("Strand: " + strand.size());

        // 2. változat HashSet-tel
        System.out.println("-----");
        System.out.println("2. valtozat");
        HashSet<Integer> usz = new HashSet<>();
        HashSet<Integer> sza = new HashSet<>();
        HashSet<Integer> gyo = new HashSet<>();
        HashSet<Integer> str = new HashSet<>();
        for (int i = 0; i < mozgasok.size(); i++)
        {
            if (mozgasok.get(i).honnan == 1 && mozgasok.get(i).irany == 0)
            {
                usz.add(mozgasok.get(i).azon);
            }
            else if (mozgasok.get(i).honnan == 2 && mozgasok.get(i).irany == 0)
            {
                sza.add(mozgasok.get(i).azon);
            }
            else if (mozgasok.get(i).honnan == 3 && mozgasok.get(i).irany == 0)
            {
                gyo.add(mozgasok.get(i).azon);
            }
            else if (mozgasok.get(i).honnan == 4 && mozgasok.get(i).irany == 0)
            {
                str.add(mozgasok.get(i).azon);
            }
        }
        
        System.out.println("Uszoda: " + usz.size());
        System.out.println("Szaunak: " + sza.size());
        System.out.println("Gyogyvizes medencek: " + gyo.size());
        System.out.println("Strand: " + str.size());
    }

    public static String idoformatum(int mp)
    {
        int ora;
        int perc;
        ora = mp / 3600;
        mp = mp % 3600;
        perc = mp / 60;
        mp = mp % 60;
        return ora + ":" + perc + ":" + mp;
    }

}

Ha hibát találsz benne, kérlek jelezd!

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

*

Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .