Tie koodariksi

Ohjelmoinnin alkeet

Luku 9: Lisää hakuja

Joskus ongelman ratkaisu muodostuu useammasta muuttujasta. Tällöin voimme löytää ratkaisun luomalla sisäkkäisiä silmukoita, jotka käyvät läpi muuttujien yhdistelmiä.

Sisäkkäiset silmukat

Tarkastellaan esimerkkinä seuraavaa ohjelmaa:

for a in range(1,4):
    for b in range(1,4):
        print(a,b) 

Ohjelman tulostus on seuraava:

1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

Tässä pääsilmukka käy läpi luvut 1...3 muuttujan a avulla ja sisäsilmukka käy läpi luvut 1...3 muuttujan b avulla. Niinpä saamme käytyä läpi kaikki tavat valita muuttujien a ja b arvot väliltä 1...3.

Vastaavasti voimme käydä läpi useamman muuttujan yhdistelmiä laittamalla useampia silmukoita sisäkkäin.

Matkalaukun koodi

Nyt olemme valmiit ratkaisemaan seuraavan tehtävän:

Matkalaukun lukossa on koodi, joka muodostuu neljästä numerosta väliltä 1–9. Olet kuitenkin unohtanut koodin ja muistat vain, että ensimmäinen ja kolmas numero ovat samat ja numeroiden summa on 13. Mitkä kaikki koodit sinun tulee käydä läpi, kun haluat löytää oikean koodin?

Voimme ratkaista tehtävän ohjelmalla, joka käy läpi kaikki mahdolliset koodit ja tulostaa niistä ne, jotka täyttävät ehdot. Koodissa on neljä numeroa, joista jokainen on välillä 1...9, joten teemme neljä sisäkkäistä silmukkaa.

Seuraava ohjelma etsii koodit:

for a in range(1,10):
    for b in range(1,10):
        for c in range(1,10):
            for d in range(1,10):
                if a == c and a+b+c+d == 13:
                    print(a,b,c,d)

Kun suoritamme ohjelman, se listaa meille kaikki ehdot täyttävät koodit:

1 2 1 9
1 3 1 8
1 4 1 7
1 5 1 6
1 6 1 5
1 7 1 4
1 8 1 3
1 9 1 2
2 1 2 8
2 2 2 7
2 3 2 6
2 4 2 5
2 5 2 4
2 6 2 3
2 7 2 2
2 8 2 1
3 1 3 6
3 2 3 5
3 3 3 4
3 4 3 3
3 5 3 2
3 6 3 1
4 1 4 4
4 2 4 3
4 3 4 2
4 4 4 1
5 1 5 2
5 2 5 1

Voimme toteuttaa myös ohjelman niin, että se vain laskee, montako ehdot täyttävää koodia on olemassa, eikä tulosta niitä kaikkia. Saamme tämän aikaan näin:

s = 0
for a in range(1,10):
    for b in range(1,10):
        for c in range(1,10):
            for d in range(1,10):
                if a == c and a+b+c+d == 13:
                    s += 1
print(s)

Nyt ohjelman tulostus on seuraava:

28

Meidän riittää siis kokeilla 28 koodia, jotta löydämme varmasti oikean koodin.


Tehtävä 1 Ratkaisematon

Matkalaukun koodissa on neljä numeroa väliltä 1–9. Olet unohtanut koodin, mutta muistat, että numeroiden tulo on 252. Montako tällaista koodia on olemassa?

Kirjoita ohjelma tähän:


Tehtävä 2 Ratkaisematon

Matkalaukun koodissa on neljä numeroa väliltä 1–9. Olet unohtanut koodin, mutta muistat, että jokainen koodin numero on suurempi kuin edellinen numero. Montako tällaista koodia on olemassa?

Kirjoita ohjelma tähän:


Tehtävä 3 Ratkaisematon

Matkalaukun koodissa on neljä numeroa väliltä 1–9. Olet unohtanut koodin, mutta muistat, että koodissa on neljä eri numeroa. Montako tällaista koodia on olemassa?

Kirjoita ohjelma tähän:


Tehtävä 4 Ratkaisematon

Heität noppaa viisi kertaa ja jokainen heitto antaa silmäluvun 1–6. Monellako tavalla voit saada summan 15 tällä tavalla? Yksi tapa on 4+2+1+6+2 = 15.

Kirjoita ohjelma tähän:


Tehtävä 5 Ratkaisematon

Positiiviset kokonaisluvut a, b ja c muodostavat Pythagoraan kolmikon, jos a < b < c ja a2 + b2 = c2. Esimerkiksi luvut 3, 4 ja 5 muodostavat Pythagoraan kolmikon.

Kun c:n yläraja on 20, on olemassa 6 Pythagoraan kolmikkoa. Nämä ovat (3,4,5), (5,12,13), (6,8,10), (8,15,17), (9,12,15) ja (12,16,20). Montako Pythagoraan kolmikkoa on olemassa, kun c:n yläraja on 50?

Kirjoita ohjelma tähän:


Tehtävä 6 Ratkaisematon

On 16 tapaa sijoittaa musta ja valkea kuningatar 3x3-shakkilaudalle niin, että ne eivät uhkaa toisiaan. Mikä on tapojen määrä 8x8-shakkilaudalla?

Kirjoita ohjelma tähän: