Helsingin yliopisto, University of Helsinki
MOOC.FI

Viikko 3

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 metodi: int pieninEtaisyys(int[] luvut)

Parametri luvut on taulukko, joka sisältää 2..10 5 lukua. Jokainen luku on kokonaisluku välillä –10 9 ..10 9 .

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

Esimerkit

# metodin kutsu haluttu palautusarvo
1 pieninEtaisyys(new int[] {4, 1, 6, 2}) 1
2 pieninEtaisyys(new int[] {3, 1, 5, 1}) 0
3 pieninEtaisyys(new int[] {2, 60}) 58
4 pieninEtaisyys(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 metodi: int yleisinLuku(int[] luvut)

Parametri luvut on taulukko, joka sisältää 1..10 5 lukua. Jokainen luku on kokonaisluku välillä –10 9 ..10 9 .

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

Esimerkit

# metodin kutsu haluttu palautusarvo
1 yleisinLuku(new int[] {4, 1, 1, 2, 1}) 1
2 yleisinLuku(new int[] {5, 5, 5, 2}) 5
3 yleisinLuku(new int[] {5, 5, 5, 5}) 5
4 yleisinLuku(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 metodi: long pieninKasvatus(int[] luvut)

Parametri luvut on taulukko, joka sisältää 1..10 5 lukua. Jokainen luku on kokonaisluku välillä –10 9 ..10 9 .

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

Esimerkit

# metodin kutsu haluttu palautusarvo
1 pieninKasvatus(new int[] {2, 3, 2, 3}) 4
2 pieninKasvatus(new int[] {2, 2, 2, 2}) 6
3 pieninKasvatus(new int[] {2, 4, 1, 7}) 0
4 pieninKasvatus(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:

  • Asiakas A tuli hetkellä 3 ja lähti hetkellä 8.
  • Asiakas B tuli hetkellä 4 ja lähti hetkellä 6.
  • Asiakas C tuli hetkellä 5 ja lähti hetkellä 10.
  • Asiakas D tuli hetkellä 9 ja lähti hetkellä 12.

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

Toteutus

Toteuta metodi: int ennatys(int[] tulot, int[] lahdot)

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

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

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

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

Esimerkit

# metodin kutsu haluttu palautusarvo
1 ennatys(new int[] {3, 4, 5, 9}, new int[] {8, 6, 10, 12}) 3
2 ennatys(new int[] {3, 2, 10, 1}, new int[] {8, 9, 20, 5}) 3
3 ennatys(new int[] {1, 3, 5}, new int[] {2, 4, 6}) 1
4 ennatys(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 metodi: long pieninMuutos(int[] luvut)

Parametri luvut on taulukko, joka sisältää 1..10 5 lukua. Jokainen luku on kokonaisluku välillä –10 9 ..10 9 .

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

Esimerkit

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