Viikko 3: TMC-tehtävät

Tehtävien deadline: ma 2.2. klo 01:59

Tehtävissä SAA käyttää javan valmiita järjestämismetodeita!


Tehtävä 1

Sinulle on annettu taulukko kokonaislukuja, ja tehtäväsi on selvittää pienin etäisyys kahden luvun välillä.

Esimerkiksi taulukossa {4, 1, 6, 2} pienin etäisyys on 1, koska lukujen 1 ja 2 etäisyys on 1.

Toteutus

Toteuta seuraava metodi:

int pieninEtaisyys(int[] luvut)

Parametri luvut on taulukko, joka sisältää 2..105 lukua. Jokainen luku on kokonaisluku välillä –109..109.

Metodin tulee palauttaa pienin etäisyys kahden taulukon luvun välillä.

Esimerkit

#metodin kutsuhaluttu palautusarvo
1pieninEtaisyys(new int[] {4, 1, 6, 2})1
2pieninEtaisyys(new int[] {3, 1, 5, 1})0
3pieninEtaisyys(new int[] {2, 60})58
4pieninEtaisyys(new int[] {-1000, 1001, 0})1000

Tehtävä 2

Sinulle on annettu taulukko kokonaislukuja, ja tiedät, että yli puolet taulukon luvuista on samoja. Tehtäväsi on selvittää tämä yleisin luku.

Esimerkiksi taulukossa {4, 1, 1, 2, 1} yleisin luku on 1.

Toteutus

Toteuta seuraava metodi:

int yleisinLuku(int[] luvut)

Parametri luvut on taulukko, joka sisältää 1..105 lukua. Jokainen luku on kokonaisluku välillä –109..109.

Metodin tulee palauttaa taulukon yleisin luku. Tämä on yksikäsitteinen, koska yli puolet taulukon luvuista on samoja.

Esimerkit

#metodin kutsuhaluttu palautusarvo
1yleisinLuku(new int[] {4, 1, 1, 2, 1})1
2yleisinLuku(new int[] {5, 5, 5, 2})5
3yleisinLuku(new int[] {5, 5, 5, 5})5
4yleisinLuku(new int[] {1, 2, 2})2

Tehtävä 3

Sinulle on annettu taulukko kokonaislukuja, ja tehtäväsi on muuttaa lukuja niin, että mikään luku ei esiinny taulukossa kahta kertaa.

Saat kasvattaa jokaista lukua haluamasi verran (myös ei yhtään). Et saa kuitenkaan pienentää mitään lukua. Tehtäväsi on etsiä ratkaisu, jossa kokonaiskasvatus on mahdollisimman pieni.

Esimerkiksi jos taulukko on {2, 3, 2, 3}, yksi optimiratkaisu on muuttaa se muotoon {2, 5, 4, 3}. Muutokset ovat {0, +2, +2, 0}, joten kokonaiskasvatus on 4.

Toteutus

Toteuta seuraava metodi:

long pieninKasvatus(int[] luvut)

Parametri luvut on taulukko, joka sisältää 1..105 lukua. Jokainen luku on kokonaisluku välillä –109..109.

Metodin tulee palauttaa pienin kokonaiskasvatus, jonka jälkeen jokainen taulukon luku on on eri luku.

Esimerkit

#metodin kutsuhaluttu palautusarvo
1pieninKasvatus(new int[] {2, 3, 2, 3})4
2pieninKasvatus(new int[] {2, 2, 2, 2})6
3pieninKasvatus(new int[] {2, 4, 1, 7})0
4pieninKasvatus(new int[] {3, 1, 2, 1, 1})7

Tehtävä 4

Sinulla on tiedossa kaikki ravintolassa päivän aikana käyneet henkilöt sekä heidän tulo- ja lähtöaikansa. Tehtäväsi on laskea, montako asiakasta ravintolassa oli enimmillään.

Voit olettaa, että yhtenä ajanhetkenä vain yksi asiakas voi tulla tai lähteä.

Tarkastellaan esimerkiksi seuraavaa tilannetta:

Nyt ravintolassa oli enimmillään 3 asiakasta (A, B ja C) hetkien 5 ja 6 välissä.

Toteutus

Toteuta seuraava metodi

int ennatys(int[] tulot, int[] lahdot)

Parametri tulot on taulukko, joka sisältää jokaisen asiakkaan tuloajan. Jokainen aika on kokonaisluku välillä 0..109.

Parametri lahdot on taulukko, joka sisältää jokaisen asiakkaan lähtöajan. Jokainen aika on kokonaisluku välillä 0..109.

Taulukot tulot ja lahdot sisältävät yhtä monta lukua, ja asiakkaiden määrä on välillä 1..105. Luonnollisesti asiakas ei koskaan lähde ravintolasta ennen kuin hän on tullut sinne.

Metodin tulee palauttaa suurin asiakkaiden määrä ravintolassa.

Esimerkit

#metodin kutsuhaluttu palautusarvo
1ennatys(new int[] {3, 4, 5, 9}, new int[] {8, 6, 10, 12})3
2ennatys(new int[] {3, 2, 10, 1}, new int[] {8, 9, 20, 5})3
3ennatys(new int[] {1, 3, 5}, new int[] {2, 4, 6})1
4ennatys(new int[] {100, 999}, new int[] {1000, 1001})2

Tehtävä 5

Sinulle on annettu taulukko kokonaislukuja, ja tehtäväsi on muuttaa lukuja niin, että jokainen taulukon luku on sama.

Saat kasvattaa tai vähentää jokaista lukua haluamasi verran (myös ei yhtään). Tehtäväsi on etsiä ratkaisu, jossa kokonaismuutos on mahdollisimman pieni.

Esimerkiksi jos taulukko on {1, 7, 3, 4}, yksi optimiratkaisu on muuttaa se muotoon {3, 3, 3, 3}. Muutokset ovat {+2, -4, 0, -1}, joten kokonaismuutos on 7.

Toteutus

Toteuta seuraava metodi:

long pieninMuutos(int[] luvut)

Parametri luvut on taulukko, joka sisältää 1..105 lukua. Jokainen luku on kokonaisluku välillä –109..109.

Metodin tulee palauttaa pienin kokonaismuutos, jonka jälkeen jokainen taulukon luku on on sama luku.

Esimerkit

#metodin kutsuhaluttu palautusarvo
1pieninMuutos(new int[] {1, 7, 3, 4})7
2pieninMuutos(new int[] {1, 2, 1, 2})2
3pieninMuutos(new int[] {7, 7, 7, 7})0
4pieninMuutos(new int[] {1, 1, 1, 100, 1})99