Python Sayı Basamakları Bulma

CCC + BBB + AAA = CAAB ise, A, B, C harflerini nasıl bulabilirim.

(Rakamlar farklı ve 1’den 9’a kadar tam sayılardır.)

Burada şu tarz bir matematik kullanmamız gerekecek,
AAA = 100A + 10A + A = 111A
(Yüzler basamagındaki rakamın 100 katı + onlar basamagındaki rakamın 10 katı + birler basamağındaki rakam)
Aynı şekilde,
BBB = 111B
CCC = 111C’dir.
CAAB dediğimiz şey ise 1000C + 100A + 10A + B’dir.

Sonuç itibariyle,
111A+111B+111C = 1000C+110A+B’dir.
Bundan sonrası artık değer vererek gerekli kombinasyonları bulmaktır.
Bu bilinmeyenler rakamdır fakat 0 olamazlar. Cünkü AAA gibi, BBB gibi değerlerde yüzler basamağında yer almışlardır. Bir sayının en büyük basamağı 0 olamaz.

Yani 0 < A, B, C < 10 şeklindedir aralığımız.
Bunu da for döngüleri ile oluşturacağız.

def cozumle(sayi):
    # "AAA"yı parametre olarak alacağız. Her ne kadar ismine sayi desem de aslında karakter veri tipinde.
    uzunluk = len(sayi)
    liste1 = []
    liste2 = []
    for i in range(uzunluk-1, -1, -1):
        liste2.append(10**i)
    for i in range(0, uzunluk):
        liste1.append(sayi[i])

    return liste1, liste2, uzunluk

def hesapla(n1, n2, n3, n4):
    n1, n2, n3 ,n4 = cozumle(n1), cozumle(n2), cozumle(n3), cozumle(n4)
    list1 = [n1, n2, n3, n4]
    list2 = [0, 0, 0, 0]
    for A in range(1, 10):
        for B in range(1, 10):
            for C in range(1, 10):
                list2 = [0, 0, 0, 0]
                for x in range(4):
                    for y in range(list1[x][2]):
                        if list1[x][0][y] == "A":
                            list2[x] += list1[x][1][y] * A
                        elif list1[x][0][y] == "B":
                            list2[x] += list1[x][1][y] * B
                        else:
                            list2[x] += list1[x][1][y] * C

                if sum(list2[0:3]) == list2[3]:
                    print(f"A: {A}, B: {B}, C:{C}")


hesapla("AAA", "BBB", "CCC", "CAAB")
hesapla("AB", "BC", "CA", "ABC")

Çıktı:
A: 9, B: 8, C: 1
A: 1, B: 9, C:8
Şeklinde olacaktır.

Not: Kod kısmı gereksiz derecede uzun olabilir. Dilerseniz değerleri input ile alacak şekilde ayarlayabilirsiniz.

Edit: cozumle() fonksiyonunda bir terslik varmış, şimdi düzelttim. Artık 2 basamaklı sayılarda da çalışıyor.

3 Beğeni

ah be hocam ben cevaplayacaktım çok beğenmiştim soruyu :D

1 Beğeni

Daha kısa bir algo yazmana kim engel ki :new_moon_with_face::upside_down_face:

1 Beğeni

Hocam sizde bi kod paylaşabilir misiniz
Müsait iseniz?

import itertools

for a, b, c in itertools.permutations([1, 2, 3, 4, 5, 6, 7, 8, 9], 3):
    if 111*a + 111*b + 111*c == 1000*c + 110*a + b:
        print(a, b, c)

# 9 8 1

CCC + BBB + AAA = CAAB
CCC = 100*C + 10*C + C = 111*C
BBB = 100*B + 10*B + B = 111*B
AAA = 100*A + 10*A + A = 111*A
CAAB = 1000*C + 100*A + 10*A + B = 1000*C + 110*A + B
1000*C + 110*A + B = 111*A + 111*B + 111*C
A = 889*C - 110*B

from itertools import permutations

for a, b, c in permutations(range(10), 3):
  if a == 889*c - 110*b:
    print(f'a: {a} b: {b} c: {c}')
    # a: 9 b: 8 c: 1
1 Beğeni