Tiedämme, että Maija on viisi vuotta nuorempi kuin Uolevi, ja lisäksi jos kerromme heidän ikänsä keskenään, saamme luvun 594. Kuinka vanhoja Maija ja Uolevi ovat?
Jotta voimme ratkaista arvoituksen,
meidän täytyy pukea se tietokoneen ymmärtämään muotoon.
Tässä tapauksessa voimme merkitä Maijan ikää x
:llä,
jolloin Uolevin ikä on x+5
.
Haluamme etsiä ratkaisun, jossa pätee ehto x*(x+5) == 594
.
Seuraava ohjelma etsii arvoituksen ratkaisun käymällä läpi
kaikki vaihtoehdot Maijan iälle silmukan avulla.
Ohjelma olettaa, että Maijan ikä on ainakin 0 vuotta ja
alle 120 vuotta, eli ohjelma käy läpi x
:n arvot 0...119.
Jokaisen iän kohdalla ohjelma tarkastaa, päteekö arvoituksen ehto,
ja jos pätee, ohjelma tulostaa iät.
for x in range(120): if x*(x+5) == 594: print(x,x+5)
Kun suoritamme ohjelman, saamme seuraavan tuloksen:
22 27
Tämä tarkoittaa, että Maija on 22-vuotias ja Uolevi on 27-vuotias. Todellakin 27–22 = 5 ja 22*27 = 594, eli ratkaisu on oikein.
Liisalla on pussillinen kuulia. Jos hän jakaa kuulat neljän ryhmiin, kolme kuulaa jää yli. Jos hän jakaa kuulat viiden ryhmiin, neljä kuulaa jää yli. Jos hän jakaa kuulat seitsemän ryhmiin, kolme kuulaa jää yli. Montako kuulaa Liisalla on yhteensä?
Merkitsemme kuulien määrää x
:llä,
ja haluamme löytää ratkaisun, joka täyttää kolme ehtoa:
x%4 == 3
, x%5 == 4
ja x%7 == 3
.
Koska haluamme kaikkien ehtojen pätevän yhtä aikaa,
yhdistämme ne and
-sanalla.
Tarvitsemme vielä silmukkaa varten
jonkin ylärajan kuulien määrälle.
Oletamme, että kuulia on alle tuhat,
eli käymme läpi x
:n arvot 0...999.
Tuloksena on seuraava ohjelma:
for x in range(1000): if x%4 == 3 and x%5 == 4 and x%7 == 3: print(x)
Kun suoritamme ohjelman, se tulostaa seuraavat ratkaisut:
59 199 339 479 619 759 899
Siis välillä 0...999 on seitsemän ratkaisua eikä tehtävään ole yksikäsitteistä ratkaisua. Pienin mahdollinen ratkaisu on, että Maijalla on 59 kuulaa.
Jos haluamme löytää vain yhden ratkaisun, voimme muuttaa ohjelmaa näin:
for x in range(1000): if x%4 == 3 and x%5 == 4 and x%7 == 3: print(x) break
Tässä komento break
saa aikaan, että silmukka päättyy heti,
kun löydämme ratkaisun.
Niinpä ohjelma tulostaa vain pienimmän ratkaisun:
59
Kirjoita ohjelma tähän:
Kirjoita ohjelma tähän:
Kirjoita ohjelma tähän:
Moniko luku välillä 1...1000 on jaollinen ainakin yhdellä luvuista 3, 5 ja 7?
Kirjoita ohjelma tähän:
Kirjoita ohjelma tähän:
Kirjoita ohjelma tähän: