Karekök olan sayıları alt alta yazdıran C programı

Ben gerçekten ne diyeceğimi bilmiyorum. Bir psikoloğa gidip öfkenizin kaynağını bulmanızı tavsiye ederim.
Öfkemin kaynağı yeni bilgisayar mühendisliği okumaya başlayan biri olarak ilerde senin gibi liyakatsız kişiler yüzünden hem maaşların düşme olasılıği hemde iş bulmada zorluk çekme olasılığı bir de olurda aynı ekipte olursak senin gibilerin arkasını toplama olasılığı.
 
Öfkemin kaynağı yeni bilgisayar mühendisliği okumaya başlayan biri olarak ilerde senin gibi liyakatsız kişiler yüzünden hem maaşların düşme olasılıği hemde iş bulmada zorluk çekme olasılığı bir de olurda aynı ekipte olursak senin gibilerin arkasını toplama olasılığı.

Bu kadar özgüvensiz olmayın :) umarım sizin gibi biriyle hiçbir zaman tanışmam.
 
Python:
import math
asd=0
for i in range(1,10000):
    a = list(str(i))
    for l in range(len(a)):
        a[l] = int(a[l])
    if len(a)==2:
        if (a[0]+a[1])**2==i:
            print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]} + {a[1]}")
            asd=1
    if len(a)==3:
        if asd!=1:
            if (a[0]+a[1]+a[2])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]} + {a[1]} + {a[2]}")
                asd=1
            elif (a[0]*10+a[1]+a[2])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]*10 + a[1]} + {a[2]}")
                asd=1
            elif (a[0]+a[1]*10+a[2])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]} + {a[1]*10 + a[2]}")
                asd=1
    if len(a)==4:
        if asd!=1:
            if (a[0]+a[1]+a[2]+a[3])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]} + {a[1]} + {a[2]} + {a[3]}")
            elif (a[0]*10+a[1]+a[2]+a[3])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]*10+a[1]} + {a[2]} + {a[3]}")
            elif (a[0]+a[1]*10+a[2]+a[3])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]} + {a[1]*10+a[2]} + {a[3]}")
            elif (a[0]+a[1]+a[2]*10+a[3])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]} + {a[1]} + {a[2]*10+a[3]}")
            elif (a[0]+a[1]*100+a[2]*10+a[3])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]} + {a[1]*100+a[2]*10+a[3]}")
            elif (a[0]+a[1]+a[2]*10+a[3])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]} + {a[1]} + {a[2]*10+a[3]}")
            elif (a[0]*10+a[1]+a[2]*10+a[3])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]*10 + a[1]} + {a[2]*10+a[3]}")
            elif (a[0]*100+a[1]*10+a[2]*10+a[3])**2==i:
                print(str(i) + " Mükemmel Karekök Sayıdır! Karekök: " + str(int(math.sqrt(i))) + "   => " f" {a[0]*100 + a[1]*10 + a[2]} + {a[3]}")
    asd=0
Python ile yaptım ancak çok fazla kod karmaşası oldu, hangi mantıkla yapmak lazım? Kodları azaltmam lazım. C bilsem aynı kodu çevirir atardım, kusuruma bakmayın.

@Vavien. @bitwise Efendim, özür dilerim. Ben sadece "Python kullanarak nasıl yapabilirim?" diye denedim ve paylaşmak istedim. Zaten kodlar C değil.
 
Son düzenleyen: Moderatör:
Ben yazacaktım ama küçük bir araştırmayla hazırını bulunca vazgeçtim. Buyrun, kaynak kod:

C:
#include <stdio.h>
#include <string.h>

#define BUF 20

int make_target(int nums[], int target, int mult, int length)
{
  long newtarget = target - nums[length - 1] * mult;

  if (length == 1)
    return newtarget == 0;
  else
    return
      (newtarget > 0) &&
      (make_target(nums, newtarget, mult * 10, length-1) ||
       make_target(nums, newtarget, 1, length-1));
}

int main()
{
  int len, i;
  long s, sqrt, total;
  char buf[BUF];
  int nums[BUF];

  total = 0;
  for (sqrt = 2; sqrt <= 9999; sqrt++)
    {
      s = sqrt * sqrt;
      snprintf(buf, BUF, "%ld", s);
      len = strlen(buf);
      for (i = 0; i < len; i++)
        nums[i] = buf[i] - '0';
      if (make_target(nums, sqrt, 1, len)) {
        total += s;
        printf("%ld %ld %ld\n", s, sqrt, total);
      }
    }

  printf("TOTAL: %ld\n", total);
  return 0;
}

Test ettim ve düzgün çalışıyor gibi görünüyor. Siz de test edersiniz.
 
Son düzenleme:
1 bir S sayısıdır √1 = 1 = 1
81 bir S sayısıdır √81 = 9 = 8 + 1
100 bir S sayısıdır √100 = 10 = 10 + 0
1296 bir S sayısıdır √1296 = 36 = 1 + 29 + 6
2025 bir S sayısıdır √2025 = 45 = 20 + 25
3025 bir S sayısıdır √3025 = 55 = 30 + 25
6724 bir S sayısıdır √6724 = 82 = 6 + 72 + 4
8281 bir S sayısıdır √8281 = 91 = 82 + 8 + 1
9801 bir S sayısıdır √9801 = 99 = 98 + 01
10000 bir S sayısıdır √10000 = 100 = 100 + 00
55225 bir S sayısıdır √55225 = 235 = 5 + 5 + 225
88209 bir S sayısıdır √88209 = 297 = 88 + 209

"Ne kadar zor olabilir ki" diyerek Java ile giriştim. 15 dakikamı aldı. (100000'e kadar olan sayılar.)
Kara listeye alınmamak için kaynak kod paylaşımı yapmıyorum.
 
Soruyu böyle sorman tamamen yanlış. Keşke üzerinde uğraştığın bir çözümü de belirtseydin belkide bir fikri olan üye cevap yazabilirdi. Alınma ama kimse hazır cevaba çok niyetli olmaz.
 
Bizim okulda da bitirme ödevleri genelde ya parayla yaptırılırdı ya da tanıdık eş dosta yaptırılırdı. Benim gibi ameleler de oturur kafa yorar kendisi yazardı. Türkiyedeki üniversitelerin durumu bu maalesef. Aslında çözüm çok basit fakat oturup kimse denemiyor. Nasıl olsa yapan birisi var.
 

Yeni konular

Geri
Yukarı