3.naloga-programiranje

3.naloga-programiranje

Avtor: Lea Ostanek

BESEDILO NALOGE (v angleščini)

It can be seen that the number, 125874, and its double, 251748, contain exactly the same digits, but in a different order. Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, contain the same digits.

Tu se nahaja datoteka z rešitvijo : Najmanjše število

OPIS PROBLEMA

Naloga od nas zahteva, da poiščemo najamnjše pozitivno število, katere večkratniki vsebujejo iste števke kot število samo, vendar v drugačnem vrstnem redu.

RAZLAGA ALGORITMA

Da lahko poiščemo tako najmanjše število, ki vsebuje iste števke, kot večkratniki števila, nam v definicijo kode ni potrebno podajati argumenta, s katerim bomo delali.

Zato pred pisanjem programa definiramo nek števec i, ki ga postavimo na 1. Definiramo še razliko, ki jo nastavimo na vrednost True, predstavlja pa razlikovanje med ciframi. Nato gremo z zanko while po vseh razlikah, to pomeni, da moramo v zanki definirati število i in večkratnike števila i, in še nek novi števec vredu, ki ga nastavimo na vrednost True. Pri definiranju številke in večkratnikov moramo paziti, da jih spremenimo v niz z ukazom str, saj lahko le na ta način preverjamo ali so določene števke vsebovane v njih.


i=1
razlika = True

while razlika == True: # dokler se števke razlikujejo
    mojaCifra = str(i)
    v2 = str(2*i)
    v3 = str(3*i)
    v4 = str(4*i)
    v5 = str(5*i)
    v6 = str(6*i)

    vredu = True

V zanki moramo za vsako števko števila i s for zanko preveriti ali večkratniki vsebujejo iste števke, kot jih vsebuje številka. To moramo storiti tako, da preverjamo za vsak večkratnik posebej; če v večkratniku program ne najde števke iz števila i, števec vredu nastavimo na False. Ujemanje števk preverimo tudi v obratnem vrstnem redu; ali se števke v večkratnikih ujemajo s števkami v številu i, in v primeru, da se števke ne ujemajo števec vredu nastavimo na vrednost False.


    for m in mojaCifra:
        if (v2.find(m)<0):
            vredu=False # v dvakratniku ne najde nobene števke
        if (v3.find(m)<0):
            vredu=False
        if (v4.find(m)<0):
            vredu=False
        if (v5.find(m)<0):
            vredu=False
        if (v6.find(m)<0):
            vredu=False

    for v in v2:
        if (m.find(v)<0):
            vredu=False
    for v in v3:
        if (m.find(v)<0):
            vredu=False
    for v in v4:
        if (m.find(v)<0):
            vredu=False
    for v in v5:
        if (m.find(v)<0):
            vredu=False
    for v in v6:
        if (m.find(v)<0):
            vredu=False

Na koncu moramo še izpisati najmanjše število i. To storimo tako, da preverimo, če je števec vredu enak vrednosti True, in če je to res potem nam program to število izpiše, sicer pa nam števec i samo poveča za 1.


    if vredu == True:
        razlika = False
        print(mojaCifra)
        break

    else:
        i=i+1

0%
0%