Güzel bir problem

Başlatan Orhan61, 05 Ocak 2020 - 15:02:42

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

Orhan61

Bir grup pozitif tam sayıyla ilgili şunlar biliniyor:
-Sayıların hepsi farklı ve 100'den küçük.
-Tüm sayı çiftlerinin toplamı farklı.
Bu sayıların toplamı en fazla ne olabilir?
Bu probleme çözüm olacak kodu yazmamda yardımcı olurmusunuz?

shigej38

pythonda random kütüphanesini kullanarak yapabilirsin random olarak 0 ile 100 arası sayı oluşturucaksın ve listeye alacaksın aldığın listeden rastgele 2 sayı seçip toplayacaksın daha sonra toplamı bir listeye kaydedeceksin daha sonra ikinci toplamın hali hazırda listede olup olmadığını kontrol ediceksin if bloğu ile else bloğu ile listeye ekleyeceksin ve sonunda toplamların listesini toplayacaksın. burda ki önemli bir parametre bu grup kaç tane sayı içeriyor bu senin döngünün sınırlayıcısı olacak

freeman

Okul ödevi gibi duruyor.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

shigej38

Alıntı yapılan: freeman - 06 Ocak 2020 - 15:04:01
Okul ödevi gibi duruyor.

bencede ödev gibi ama gidiş yolu gösterilebilir diye düşünüyorum

Orhan61

#4
Alıntı yapılan: shigej38 - 06 Ocak 2020 - 12:45:50
pythonda random kütüphanesini kullanarak yapabilirsin random olarak 0 ile 100 arası sayı oluşturucaksın ve listeye alacaksın aldığın listeden rastgele 2 sayı seçip toplayacaksın daha sonra toplamı bir listeye kaydedeceksin daha sonra ikinci toplamın hali hazırda listede olup olmadığını kontrol ediceksin if bloğu ile else bloğu ile listeye ekleyeceksin ve sonunda toplamların listesini toplayacaksın. burda ki önemli bir parametre bu grup kaç tane sayı içeriyor bu senin döngünün sınırlayıcısı olacak
random kütüphanesi kullanarak liste oluşturduğumuzda istenen şartı sağlayan bir liste elde ettik diyelim.Peki bu kümenin toplamı en fazla olma şartını sağlayıp sağlamadığını nasıl kontrol edeceğiz.Belkide en büyük şartı sağlayan listeyi asla oluşturmayacak




Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 18 Ocak 2020 - 16:08:34

[mention=651032]@shigej38[/mention]
bir kod yazdım sonucu vereceğine eminim ama bilgisayar bile yetersiz kalıyor :)
import random
import itertools
istenen=[]
for x in range(12,21):
    a=itertools.combinations(range(1,100),x)
    ikilitoplamlist = []
    arananlar = []
    for i in a:
        içindevarmı = False
        geçicitoplamlar = []
        for aranan in arananlar:
            toplam = i + aranan
            geçicitoplamlar.append(toplam)
        for ikilitoplam in ikilitoplamlist:
            if ikilitoplam in geçicitoplamlar:
                içindevarmı = True
                break
        if içindevarmı == 0:
            arananlar.append(i)
            ikilitoplamlist.extend(geçicitoplamlar)
    istenen.append(sum(arananlar))
print(max(istenen))

shigej38

şu şekilde yapabilirsin o kontrolu ikili toplamları aldığın liste için bir while döngüsü yaparsın ve condution olarak belli bir sayıdan büyük olma şeklinde verirsin ya da listeyi while döngüsü içerisinde for ile dolanırsın ikili olarak karşılaştırırsın küçük olanı listeden silersin ve sona kalan elemanın her zaman en büyük olanı olur

Onur48

#6
Soruyu anlamadım. Anlamayı deneyeceğim.

100'den küçük ve sayıların hepsi farklı. Zaten toplamları farklı olacağından farklı demesine gerek yoktu gibime geliyor.
Tüm sayı çiftlerinin toplamı farklı.

Diyelim ki sayı grubu 1, 2, 3 olsun.

Çiftler halinde yazarsak.

1 + 2 = 3
1 + 3 = 4
2 + 3 = 5

4'ü de ekleyelim yukarda bir sorun yok.
1 + 4 = 5
2 + 4 = 6
3 + 4 = 7
(4 sıkıntılı)
5'i ekleyelim.
5 + 1 = 6
5 + 2 = 7
5 + 3 = 8
5 sıkıntılı değil.

Tabi 99'dan geriye doğru gidince büyük olma ihtimali de var.

Yani a ve b diye iki dizi olacak. Bunlardan a olanı ilk 1 olacak. b 1'den 99'a kadar dolaşacak. Sonra 2'de dolaşılacak. Toplamalar bir yerde tutulacak. Sonra karşılaştırılacak.(karşılaştırma ilk yapılsa da olur.) Sonra sonra baya karışık bu... :)= Soruyu yanlışta anlamış olabilirim. 98'den geri gitme ihtimali de olabilir. Sıralı olmama ihtimalide varda ilk 3 sayının 99-98-97 olduğunu tahmin ediyorum.

Orhan61

#7
[mention=651190]@Onur48[/mention]
Doğru anlamışsınız 99,98,97,olmalı ama buradan sonra iş karışıyor belli bir düzen yok toplamı en büyük veren listede
Yada ben göremedim onun için kodunu yazmaya çalıştım ama oda baya zorladı


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 19 Ocak 2020 - 22:38:16

Ek bilgi olarak; ben şu çıkarımda bulundum istenen küme en fazla 20 elemanlı olabilir.Çünkü C(20,2)=190 ve 1den 100 e kadar olan sayılarla en fazla 197farklı değer oluşabilir.Ancak küme 20elemandan da az eleman içeriyor olabilir

Onur48

Matematiği iyi olan birine sor bunun formülünü çıkarır. Fonksiyonunu oluşturursun. Bütün sayı aralıkları için kullanırsın.
99'dan başlamaya bilir belki. Son sayılarda oynama olabilir.