Zeka sorularından oluşan ve Türkiyenin en zeki kişilerinin toplanacağı adresimiz zeka küp zeka soruları yayına geçmiş bulunuyor. Sitemize üye olmak oldukça kolay. Google hesabınızla da giriş yapabilirsiniz. İçinde binlerce zeka sorusu, programlama sorusu olacak sitemizde siz de yerinizi alıp günde bir kaç soru çözüp zekanızı arttırabilirsiniz.
1-52 arası numaraların olduğu bir deste kart var. Deste rastgele karıştırılıyor. Sonra birinci kart açılıyor. İlk açılan kart icin 1 puan her zaman alınıyor. Ondan sonra her açılan kartın numarası o ana kadar açılan en yüksek numaradan fazla ise 1 puan, değilse 0 puan alınıyor. Bu oyun oynanırsa oyundan alınması beklenen puan ne kadardır?
52 adet kart 1 den 52 ye kadar numaralandırılıp güzelce karıştırılıyor. Rastgele 3 kart çekiliyor ve masaya soldan sağa açılıyor. Masada açılan kartların küçükten büyüğe sıralanma olasılığı nedir? (Örneğin 8, 27, 36)
Sorumuz şu: Bir adam elindeki çeki bozdurmak için bankaya gitti. Fakat veznedar bir yanlışlık yaptı ve çekin üzerinde yazılı liralar yerine kuruş ve kuruşlar yerine de lira vererek çeki ödedi. Adam da dikkat etmeden paraları cebine koydu. Eve giderken paranın 5 kuruşunu düşürdü. Bu vesile ile parasını saydı ve cebinde çekin değerinin tam iki katı parası olduğunun farkına vardı. Çekin üzerinde yazılı olan miktar ne kadardı? *
Programımız oldukça basit, lira ve kuruşu 100 lük döngülere sokuyoruz ve formülü deniyoruz.
for lira in range(100):
for kurus in range(100):
if lira + kurus / 100 == 0: continue
if (kurus + (lira - 5) / 100) / (lira + kurus / 100) == 2:
print(f"Çekin üzerinde yazan miktar: {lira}.{kurus}")
break
continue kullanmamızın sebebi sıfıra bölünme hatasından kaçmak içindir.
Bir diğer çözüm de şu olabilir
for lira in range(0,55):
for kurus in range(lira+5,105):
if 2*(float(lira)+float(kurus)/100)==float(kurus)+float(lira-5)/100:
print(str(lira)+"."+str(kurus)+"₺")
İki sayı birbirinin kendisi hariç bölenleri toplamına eşitse bu sayılara arkadaş sayılar denir. (1 dahil)
En küçük arkadaş sayılar 220 ve 284 tür. Neden? Çünkü 220’nin bölenleri olan 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 ve 110 u topladığımızda 284 elde ederiz. 284’ün bölenlerini topladığımızda ise -evet, doğru tahmin ettiniz- 220 elde ederiz. İşte gerçek arkadaşlık.
Python programlama ile 10.000 e kadar olan arkadaş sayıları bulalım. (Bu sayıyı değiştirebilirsiniz.)
def bolenler(n):
return sum([i for i in range(1,n//2+1) if n%i==0])
arkadas = dict()
for sayi in range(1,10000):
bt = bolenler(sayi)
if sayi==bolenler(bt) and sayi<bt:
arkadas[sayi]=bt
print(arkadas)
Eğer bir sayının kendisi hariç tam bölenleri toplamı sayıdan büyükse o sayıya zengin sayı diyoruz. Örneğin 12 nin bölenleri 1,2,3,4,6 nın toplamı 16>12 olduğu için zengin sayıdır. En küçük tek zengin sayı nedir?
Basit bir programla bunu bulabiliriz,
def bolenler(n):
return sum([i for i in range(1,n//2+1) if n%i==0])
sayi = 1
while sayi>bolenler(sayi):
sayi+=2
print(sayi)
Uzunluğu 2 veya daha büyük olan ve aynı zamanda tersten ve düzden yazılışları aynı olan karakter dizilerine palindrom denilmektedir. Örneğin “aaa”, “aba”, “cc” birer palindrom iken, “acaba”, “abc”, “a” birer palindrom değildir. Bir karakter dizisinin içerisinden ardışık olarak seçilen herhangi bir parçaya ardışık alt dizi denilmektedir. Örneğin “acaba” dizisi için “aca”, “ab” birer ardışık alt dizi iken, “cb”, “aaa” ardışık alt dizi değildir. 4 karakter uzunluğunda, ardışık alt dizilerinin hiçbiri palindrom olmayan kaç farklı karakter dizisi vardır? [Alfabede 29 karakter vardır]
Sorumuz bu. Elbette çözmek için başka yöntemler var ama estetik bir program parçasını da eklemek istedim.
sonuc = 0
for a in range(29):
for b in range(29):
for c in range(29):
for d in range(29):
if c != d and b != c and a != b and b != d and a != d:
sonuc += 1
print(sonuc)
Sorumuz şu: Okunuşunda ki harfleri birbirinden farklı en büyük üç haneli sayı nedir?
Elbette bu soruyu elle de çözmek mümkün ama epey deneme yanılma yapmak gerekir. Örneğin yüzbir, okunuşunda harfler farklı, yüzdört yine okunuşunda ki harfleri farklı daha büyük bir sayı.
Gelin bu sorumuzu python ile çözdürelim.
def yaziyap(sayi):
birler = ["","bir","iki","üç","dört","beş","altı","yedi","sekiz","dokuz"]
onlar = ["","on","yirmi","otuz","kırk","elli","altmış","yetmiş","seksen","doksan"]
sayi=str(sayi)
if sayi[0]=="1":
return "yüz"+onlar[int(sayi[1])] + birler[int(sayi[2])]
else:
return birler[int(sayi[0])]+"yüz" + onlar[int(sayi[1])] + birler[int(sayi[2])]
for n in reversed(range(999)):
if len(yaziyap(n)) == len(set(yaziyap(n))):
print(yaziyap(n))
break
def kısmı bir fonksiyondur, gelen sayının okunuşunu döndürür geriye. Diğer önemli kısım ise gelen string bilginin işlenişidir. if kısmında yaptığımız gelen kelimenin harflerini sayıyoruz, bir de küme yapıp sayıyoruz. Kümelerin şöyle bir güzelliği var ki aynı elemandan birden fazla kabul etmiyor.