Лекция · 4.9

Программалауда практикалық тапсырмалар

2002 санын оқы — солдан оңға да, оңнан солға да БІРДЕЙ! Мұндай сандар палиндром деп аталады. Ал компьютер мұны қалай «көреді»? Ол санды әріптей оқи алмайды — тек цифрларды бөліп-бөліп алып, қайта құрастыра алады. Бұл қорытынды сабақта IV бөлімде үйренген БАРЛЫҚ құралды (циклдер, кірістіру, шарттар) БІРІКТІРІП, екі классикалық ҰБТ есебін шешеміз.

Санды цифрларға бөлу

IV бөлімдегі көптеген есептің НЕГІЗІ — БІР ҚАРАПАЙЫМ операция: санның соңғы цифрын бөліп алу. Мұны екі оператормен жасаймыз: n % 10 — санның СОҢҒЫ цифрын береді (қалдық); n // 10 — санның СОҢҒЫ цифрын АЛЫП ТАСТАЙДЫ (бүтін бөлу).

Мысалы, n = 573: n % 10 = 3 (соңғы цифр), n // 10 = 57 (қалған сан).

🍎
Аналогия: n % 10 — «жеміс ағашынан бір алма үзу» (соңғы цифр), n // 10 — «ағаштан сол алманы алып тастап, қалғанын қарау». Циклмен қайталасаң, БҮКІЛ ағашты (санды) «жапырақтап» аласың.
Палиндром алгоритмі
Анықтама
Палиндром сан — солға да, оңға да бірдей оқылатын сан (мысалы, 1881, 2002).
Тапсырма: A мен B аралығындағы палиндром сандарды тап.
A, B = map(int, input().split())
t = 0
for i in range(A, B+1):
    n = i
    s = 0
    while n > 0:
        k = n % 10      # соңғы цифрды ал
        n //= 10        # оны санынан алып таста
        s = s*10 + k    # жаңа санды «керісінше» құрастыр
    if s == i:
        t = 1
        print(s, end=' ')
if t == 0:
    print(-1)
Қалай жұмыс істейді? i=2002 болсын. n=2002. 1-қадам: k=2, n=200, s=2. 2-қадам: k=0, n=20, s=20. 3-қадам: k=0, n=2, s=200. 4-қадам: k=2, n=0, s=2002. n=0 болғанда while тоқтайды. s=2002, i=2002 — ТЕҢ! Демек, 2002 — палиндром.
Жауабы: A=1800, B=2020 болса → 1881 1991 2002.

Басты идея: «керісінше құрастыру» — while циклінің ішінде s-ті ӘРҚАШАН 10-ға көбейтіп, жаңа цифрды соңына қосу арқылы жүзеге асады.

⚠️
t айнымалысының рөлі: ол «КЕМ ДЕГЕНДЕ БІР палиндром табылды ма?» деген СУРАҚҚА жауап сақтайды (0 — жоқ, 1 — иә). Циклден КЕЙІН, t әлі 0 болса — БІРДЕ БІР палиндром табылмаған, «-1» шығарамыз.
Үш деңгейлі кірістіру

Соңғы есеп — үш деңгейлі кірістірілген циклдің КҮШІН көрсетеді: «цифрлары әртүрлі үштаңбалы сандардың саны нешеу?»

Тапсырма: Цифрлары әртүрлі үштаңбалы сандардың ЖАЛПЫ санын тап.
p = 0
for i in range(1, 10):        # жүздік разряд: 1-9
    for j in range(0, 10):     # ондық разряд: 0-9
        for k in range(0, 10): # бірлік разряд: 0-9
            if i != j and j != k and i != k:
                p += 1
print(p)
Идея: үш деңгей — үш разряд. Шарт i≠j and j≠k and i≠k — ЕКІ-ЕКІДЕН барлық жұп ӘРТҮРЛІ болуы керек дегенді білдіреді.
Жауабы: p = 648 (жүздік — 9 нұсқа: 1-9; ондық — қалған 9 нұсқа; бірлік — қалған 8 нұсқа). Тексеру: 9 × 9 × 8 = 648.

Басты идея: тіктөртбұрышты кестеде екі деңгей жеткілікті болды (жол, баған), ал «үш разрядты» есепте ҮШ деңгей керек — деңгей саны есептің «өлшеміне» тәуелді.

🎯 ҰБТ байланысы
Практикалық есептер бойынша тексерілетін дағды.
1
Санды цифрларға бөлу формуласы (% 10, // 10) — БАРЛЫҚ «сан цифрларымен жұмыс» есебінің негізі.
2
Палиндром алгоритмі: керісінше құрастыру + салыстыру.
3
«Барлығы әртүрлі» шартын толық жазу: n элементтің әрбір ЖҰБЫН тексеру керек.
4
Кірістірілген цикл деңгейінің санын есептің параметр (разряд) санына сай таңдау.
Сабақ қорытындысы
  • Кез келген «санмен жұмыс» есебі % 10 мен // 10 операцияларынан басталады.
  • Палиндром — санды керісінше құрастырып салыстыру.
  • «Барлығы әртүрлі» есептері — кірістірілген циклмен барлық комбинацияны сұрыптап, әр ЖҰПТЫ тексеру арқылы шешіледі.
  • Осымен IV бөлім — Python-да циклдерді программалау — толық аяқталды.