• Language:
  • Time limit: N/A
  • Memory limit: N/A

Collatzin lukujono muodostetaan valitsemalla alkuarvoksi postiivinen kokonaisluku ja toistamalla seuraavaa:

  • Jos luku on parillinen, se jaetaan kahdella.
  • Jos luku on pariton, se kerrotaan kolmella ja lisätään yksi.
  • Jos luku on yksi, lukujono päättyy.

Esimerkiksi kun alkuarvo on 6, Collatzin lukujono on 6,3,10,5,16,8,4,2,1.

Tehtäväsi on laatia tehtävän C ohjelmointikielellä koodi, joka tulostaa Collatzin lukujonon. Ohjelman suorituksen alkaessa lukujonon alkuarvo on muuttujassa X ja kaikki muut muuttujat ovat nollia.

Esimerkiksi kun alkuarvo on 6, muuttujassa X on luku 6 ohjelman suorituksen alkaessa ja ohjelman tulostuksen tulee olla 6 3 10 5 16 8 4 2 1.

Arvostelu

Sinun tulee palauttaa tekstitiedosto, jossa on ohjelman koodi. Koodissa saa olla enintään 1000 komentoa.

Koodia testataan tapauksissa, joissa muuttujassa X oleva alkuarvo on 1,2,3,\dots,1000. Jokaisen alkuarvon kohdalla koodi suoritetaan alusta. Testauksen aikana koodi saa suorittaa yhteensä enintään 6 \cdot 10^7 komentoa. Testaus päättyy, kun koodi on käsitellyt kaikki alkuarvot, koodi antaa väärän vastauksen jollekin alkuarvolle tai komentojen määrän yläraja ylittyy jonkin alkuarvon käsittelyssä.

Saat tehtävästä \lfloor k/10 \rfloor pistettä, missä k tarkoittaa, montako alkuarvoa koodi käsitteli onnistuneesti ennen testauksen päättymistä. Merkintä \lfloor \dots \rfloor tarkoittaa pyöristämistä alaspäin kokonaisluvuksi. Esimerkiksi jos koodi tuottaa oikean vastauksen alkuarvoilla 1,2,\dots,575 mutta komentojen yhteismäärä ylittyy alkuarvon 576 käsittelyn kohdalla, pistemäärä on \lfloor 575/10 \rfloor = 57.