Sayının basamakları toplamı, kareköküne eşit olan sayıları bulma ödevi

S-sayıları mükemmel karekök olarak tanımlanan doğal sayılardır. Karekök sonucunda elde edilecek değer ile karekök içindeki değerin 2 veya daha fazla değere ayrılarak toplanmasıyla elde edilen değere eşittir.yani şöyle sayının basamaklarının toplamı köküne eşit olucak şekilde. Örneğin; .
 81 bir S-sayısıdır √81=8+1
 6724 bir S-sayısıdır √6724=6+72+4
 8281 bir S-sayısıdır √8281=8+2+81=82+8 +1
 9801 bir S-sayısıdır √9801=98+0+1
örnekte olduğu gibi 1 ile 9999 arasındaki bulunan tüm mükemmel karekök olan S-sayılarını alt alta yazdıran C programını yazınız.

Hocam başka bir forumda yine aynı ödevi görmüştüm. Python ile yazdım ben işine yararsa buyur

import math #Kök almak için math modülünü içeri aktardık

tamkareler = [] #tam kare sayıları almak için bir liste oluşturduk çünkü S- sayıları sadece tam kare sayılar için geçerli. Diğer tür sayılar kök dışına ondalıklı sayı olarak (float) çıkar. Kök içindei sayılarıda toplayarak ondalıklı sayı elde edemeyiz

for i in range(1,10000): #1 den 9999a kadar olan sayıların her biri için aşşağıdakileri yaptık

    sayi = math.sqrt(i) #i sayısının karesini sayi değişkenine aktardık

    if len((str(sayi)))<=4: #eğer sayi değişkeninin karakter uzunluğu 4 ten büyük değilse aşşağıdakileri yaptırdık. Sebebide 9999 a kadar olan en büyük tam kare sayının karekökü 99dur. Ama her değer floata dönüştüğü için şöyle bir çıktı geliyor: 99.0 gibi. O yüzden 4 haneyi geçerse bir float değerdir yani herhangi bir sayının karekökü değildir. Not: Float olması demek, tam kare olmayan bir sayının karekökünü almışız demek

        # print(f"{sayi} -> {i}") #görebilmek için yazdırdık

        tamkareler.append(int(i)) #tamkareler listemize bulduğumuz tam kare leri ekledik

sonuçlar = []

for i in tamkareler:

    uzunluk = len(str(i))

    if uzunluk == 2:

        birinci_hane = int(str(i)[0])

        ikinci_hane = int(str(i)[1])

        sonuc = math.sqrt(i)

        if sonuc == birinci_hane+ikinci_hane:

            sonuçlar.append(i)

    if uzunluk == 3:

        birinci_hane=int(str(i)[0])

        ikinci_hane=int(str(i)[1])

        üçüncü_hane=int(str(i)[2])

        ilk_iki_hane=int(str(i)[0:2])

        son_iki_hane=int(str(i)[1:3])

        sonuc = math.sqrt(i)

        if sonuc == birinci_hane+ikinci_hane:

            sonuçlar.append(i)

        elif sonuc== ikinci_hane+üçüncü_hane:

            sonuçlar.append(i)

        elif sonuc== birinci_hane+üçüncü_hane:

            sonuçlar.append(i)

        elif sonuc==ilk_iki_hane+üçüncü_hane:

            sonuçlar.append(i)

        elif sonuc== birinci_hane+son_iki_hane:

            sonuçlar.append(i)

    if uzunluk == 4:

        bir=int(str(i)[0])

        iki=int(str(i)[1])

        üç=int(str(i)[2])

        dört = int(str(i)[3])

        ilk_iki=int(str(i)[0:2])

        son_iki=int(str(i)[2:4])

        ilk_üç =int(str(i)[0:3])

        son_üç =int(str(i)[1:4])

        sonuc = math.sqrt(i)

        if sonuc == bir:

            sonuçlar.append(i)

        elif sonuc == iki:

            sonuçlar.append(i)

        elif sonuc == üç:

            sonuçlar.append(i)

        elif sonuc == dört:

            sonuçlar.append(i)

        elif sonuc == bir+iki:

            sonuçlar.append(i)

        elif sonuc == bir+üç:

            sonuçlar.append(i)

        elif sonuc == bir+dört:

            sonuçlar.append(i)

        elif sonuc == iki+üç:

            sonuçlar.append(i)

        elif sonuc == iki+dört:

            sonuçlar.append(i)

        elif sonuc == üç+dört:

            sonuçlar.append(i)

        elif sonuc == bir+iki+üç:

            sonuçlar.append(i)

        elif sonuc == bir+üç+dört:

            sonuçlar.append(i)

        elif sonuc == iki+üç+dört:

            sonuçlar.append(i)

        elif sonuc == bir+iki+üç:

            sonuçlar.append(i)

        elif sonuc == bir+iki+üç+dört:

            sonuçlar.append(i)

        #

        elif sonuc == ilk_iki+son_iki:

            sonuçlar.append(i)

        elif sonuc == ilk_iki+üç:

            sonuçlar.append(i)

        elif sonuc == ilk_iki+dört:

            sonuçlar.append(i)

        elif sonuc == ilk_iki+üç+dört:

            sonuçlar.append(i)

        elif sonuc == son_iki+bir:

            sonuçlar.append(i)

        elif sonuc == son_iki+iki:

            sonuçlar.append(i)

        elif sonuc == son_iki+bir+iki:

            sonuçlar.append(i)

        elif sonuc == ilk_üç+dört:

            sonuçlar.append(i)

        elif sonuc == son_üç+bir:

            sonuçlar.append(i)

        #

        elif sonuc == ilk_iki:

            sonuçlar.append(i)

        elif sonuc == son_iki:

            sonuçlar.append(i)

        elif sonuc == ilk_üç:

            sonuçlar.append(i)

        elif sonuc == son_üç:

            sonuçlar.append(i)

print(sonuçlar)

Merhabalar elinize sağlık.
Kodun okunabilirligi acısından tanımladığınız değişkenleri import ettiğiniz modullerin hemen alt kısmına yazmalısınız.

Kaynak: Pep-8

Ayni kodlar surekli tekrar ediyor, kodlar sosyal mesafeyle yazilmis.

1 Beğeni
def splitter(sequence):
    for i in range(1, len(sequence)):
        start = sequence[0:i]
        end = sequence[i:]
        yield (start, end)
        for split in splitter(end):
            result = [start]
            result.extend(split)
            yield result

answers = []
for root in range(0, 100):
    number = root**2
    for j in splitter(str(number)):
        if sum(map(int, j)) == root:
            answers.append(number)
            break

print(answers)

C’de yield olmadığı için daha farklı yazmamız gerekebilir.


@ertugrulcakici kodunuz yanlış çalışıyor.

c lazım hocam c yazabilecek yok mu

sorunun cevabı, kodu bu mu hocam?

Kod istediğiniz cevabı veriyor.

teşekkür ederim hocam

Evet sonradan farkettim hocam soruyu yanlış anlamışım. Ben tüm sayıları işleme sokma zorunluluğumuz yok sanıyordum. mesela 289 dışarı 17 olarak çıkıyor. 8 ve 9 u toplayarak 17 elde edebiliyoruz sanıyordum.