Aşağıdaki problemi çözdüm ama sizinde farklı bakış açılarınızı görmek istiyorum.
Bir yarışmaya katılan N yarışmacıya 1’den N ye kadar olan numaralar sırayla verilir.Yarışmacılardan biri numaraları inceleyince ilginç bir durum fark eder.Ve şöyle söyler;
Benden önceki tüm tek sayıların toplamı ile benden sonraki tüm çift sayıların toplamı birbirine eşittir.
N >1 olduğuna göre bu toplam en az kaç olabilir?
def seç(s):
liste = list()
ç, t = 0, 0
y = list(map(lambda n: n, [n for n in range(1, s)]))
for n in y:
t, ç = 0, 0
for i in range(1,n):
if i%2==1:
t += i
for i in range(n+1,max(y)):
if i%2==0:
ç += i
if ç == t:
liste.append(n)
return min(liste)
print(seç(10000))
Ben böyle düşündüm ama sonuç yok siz nasıl nasıl çözdünüz?
Kod ile deneyerek bir sonuca varabiliriz ama bütün olasılıkları denememiz mümkün değil, sorunun cevabını matematiksel olarak kanıtlamamız gerekmiyor mu?
sonuca ulaşıcak kod yeterli matematiksel ispata gerek yok .Ben matematiksel sonuca ulaşamayınca mecbur algoritmaya yöneldim .benim yapmak istediğim işlemi daha hızlı yapsın diye
burada tam olarak ne demek istediniz N nin tüm durumlarını incelemek mi?
soruda toplamın en küçük değeri dediği için şartı sağlayan tüm N leri bulmaya gerek yok bu şartı sağlayan tüm N leri bulmak mümkün olmasa gerek
Tam net anlaşılmadı galiba soru örnekle anlatmaya çalışayım .Diyelimki N=10
N den küçük değerlerden birini deneyelim sayı 6 olsa altıdan küçük tekler 1+3+5 6dan büyük çiftlere 8+10 eşitlik sağlanmıyor.sağlayanı arıyoruz
Aslında ilk a tane tek sayı kendilerinden sonra gelen ilk b tane çiftin toplamı olacağı için sizin dediğiniz gibi bir durum oluşamaz.Şartı sağlayan N büyürse toplamda büyümüş demektir
def foo(n):
liste = [i for i in range(1, n)]
for i in range(n):
öncesi = liste[0:i]
sonrası = liste[i:]
tekler = [i for i in öncesi if i % 2 != 0]
ciftler = [i for i in sonrası if i % 2 == 0]
if sum(tekler) == sum(ciftler) and tekler != [] and ciftler != []:
print("N sayısı (toplam yarışmaya katılan kisi sayısı) : ", n)
print("sayıyı toplayan kişinin sıra numarası", i)
print("Tek liste : {}\nÇift liste : {}".format(tekler, ciftler), end="\n\n", )
for i in range(2, 100):
foo(i)
n=3
kontrol=True
while n and kontrol:
for i in range(1,n):
tekler=[j for j in range(1,i,2)]
if i%2==0:
çiftler=[k for k in range(i+2, n,2)]
else:
çiftler=[k for k in range(i+1, n,2)]
if sum(çiftler)==sum(tekler):
print(sum(tekler),tekler,çiftler)
kontrol=False
n=n+1