n sayıdan x e ulaşma

Programmergirl
21-07-2009, 22:55   |  #1  
OP Yeni Üye
Teşekkür Sayısı: 0
34 mesaj
Kayıt Tarihi:Kayıt: May 2008

meraba şöyle bir problem vardı da, önerilerinizi bekliyorum.

rastgele oluşturulan n (örn: n=10 ) tamsayıdan, kendi belirlediğiniz bir x (örn: x=100) sayısına; bu n tane sayıdan istediğiniz kadarına toplama işlemi yaptırarak ; en yakın sonucu nasıl elde edebiliriz.

örn:

rastgele sayılar : 10 12 18 24 9 19 17 3 6 9 24

ulaşılmaya çalışılacak sayı 100

17+3+6+24+12+18+19 = 99

algoritması nasıl olur?

MasterOfCode
25-07-2009, 22:42   |  #2  
MasterOfCode avatarı
Yeni Üye
Teşekkür Sayısı: 1
39 mesaj
Kayıt Tarihi:Kayıt: May 2009

Basit bir yöntem olarak problemin agacını cıkararak olası tüm kombinasyonlara ulasıp oradan ulasılması istenen sayıya en yakın olanı almaktır. Kısacası icice for döngüleri.

censez41
25-07-2009, 22:54   |  #3  
censez41 avatarı
Yıllanmış Üye
Teşekkür Sayısı: 3
1,705 mesaj
Kayıt Tarihi:Kayıt: Nis 2009

sen birkelime bir işlem yarışmasına özendin galiba
basıc ta yazıyım sana "valla c bilmiyorum bu programı c ye uyarla en azından mantığı anla"


ilk önce üst limit 20 olmak şartıya 10 sayı belirliyelim
input "ulaşılmak istenen sayıyı gir";ulas
dim sayılar(50),gecsay(50)
randomize timer
for say=1 to 10
sayılar(say)=int(20*rnd(1))+1
next say

daha sonra bilgisayarın en doğru sonucu bulması için büyük bir döngü yazım örneğin 1000 e kadar
sonraelimizdeki10 adet sayının rast gele içinden seçip ulaşılmak istenensayıya ençokyaklaşanları başka bir değişkene kopyalayalım
fark2=1000
for bul=1 to 1000
while toplam

sayac=sayac+1
sec=int(10*rnd(1))+1
toplam=toplam+sayılar(say):gecsay(sayac)=sayılar(say)
wend
fark=toplam-ulas
if  fark<fark2 then fark=fark2 :gosub kayit
sayac=0
next bul

daha sonra gecsay değişkenindeki verileri yazdır
print "bilgisayarın bulduğu sayılar"
for sayac=1 to 1000
print "bilgisayarın bulduğu sayılar"
if  gecsay(sayac+10)>0 then print gecsay(sayac+10);"-";  else exitfor
next sayac


kayit:
for sayac=1 to 1000
if gecsay(sayac)>0 then gecsay(sayac+10)=gecsay(sayac) else exitfor
next sayac
return

Son Düzenleme: censez41 ~ 26 Temmuz 2009 00:23