Yarışmacılar ve Numaraları

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 :smile: siz nasıl nasıl çözdünüz?

Cevap 6 mı?

farklı cevapları bekliyim biraz daha kimseyi yönlendirmek istemiyorum

ben 100 buldum 6 olmuyor cevabınız en azından karesel bir sayı olmalı çünkü tek sayılar toplamı her zaman karesel bir sayıdır

bir de
‘’’

ile

aynı şey değillermi

Evet, bir yerde hata yaptığımı fark ettim.

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 :slight_smile:

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

aynı şeyler olabilir, öğrenme aşamasındayım bilmiyorum.

Mesela belli bir N aralığını deneyip en küçük değer olarak 100 bulduk, daha büyük bir aralıkta 99 sonucuna ulaşmayacağımızı nereden bileceğiz?

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

Bunu sezgisel olarak ben de anlayabiliyorum ama tümevarım ile kanıtlayabilir miyiz diye düşünmüştüm.

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)

Şunun gibi bir şey mi ?

1 Beğeni

ufak bir yanlışlık var sadece sayıyı toplayan kişi toplama dahil edilmiyor siz dahil etmişsiniz.

Bende sezgisel olarak karar verdim N üzerinden tümevarım yapılabilirmi düşünmek gerek

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
1 Beğeni

söyleyelim kendisini cıkarsın ozaman :slight_smile:
sadece öncesi = liste[0:i]
yerine öncesi = liste[0:i-1]
yaparsak düzelir.

1 Beğeni

Cunku sayi ve toplam N’ye oranla artiyor.

Hatta ikinci dereceden polinom olmasi lazim; hesaplayayim, bakacagim.

1 Beğeni