Tam Sürümünü Görmek İçin : Bu forlar kaç çevrim yapar ?
sekizbit
23/05/2007, 23:36
Merhabalar, n hariç bütün değişkenler 0 olarak ayarli. sizce işlem bittiğinde x değişkeninde kaç kayıtlı olacağı, n cinsinden hesaplanabilirmi ? ben çıkamadım içinden.
for (i=1; i<n ; i++)
for(j=i ; j<n-1 ; j++ )
for(k =j ; k<n-3; k++)
x++;
Kurtaran
23/05/2007, 23:55
Sanırım n sayısına göre değişir...
Tahminimce n*(n-1)*(n-3) olması lazım.
sekizbit
24/05/2007, 00:09
sanirim okadar basit değil. örnek n ve, x çiktilarini aşağida vereyim birkaç tane.
birinciler n değerleri, ikincilerde x.
1 -->>0
2 -->>0
3 -->>0
4 -->>0
5 -->>1
6 -->>5
7 -->>15
8 -->>35
9 -->>70
10 -->>126
11 -->>210
12 -->>330
13 -->>495
14 -->>715
15 -->>1001
16 -->>1365
17 -->>1820
18 -->>2380
19 -->>3060
20 -->>3876
Kurtaran
24/05/2007, 01:31
Benim çıktılarımla seninkiler tutmuyor nedense..
Benim çıktılarım sole belki değişkenlerin ilk değerleri konusunda yanılmış olabilirim...
1 = 0
2 = 0
3 = 0
4 = 0
5 = 1
6 = 4
7 = 10
8 = 20
9 = 35
10 = 56
11 = 84
12 = 120
13 = 165
14 = 220
15 = 286
16 = 364
17 = 455
18 = 560
19 = 680
20 = 816
ve bu çıktıya gorede formül biraz uzun
∑ h^2 - ∑ [h*(h-1)]/2 (sigmalarda h=1 den n-4 e kadar)
Bunu koda dökersek de
for(z=1;z<=n-4;z++){
a=z*z;
b=z*(z-1)*0.5;
c=a-b;
d=d+c;
}oluyo...
yazdığın kod için kurtaran'ın çıktılarının aynısı bulunuyor.
sekizbit
24/05/2007, 02:18
çıktılar konusunda haklısınız, buraya yazarken parantezi yanlış yere koymamdan dolayı farklı sonuç çıkmış dikkat etmeden geçirmişim, (hatta konsoldan kopyalamaya erindiğim için direk txt dosyasina yazdirip ordan buraya yapiştirmiştim :) )
Sayın kurtaran matematiksel ifadeniz için teşekkür ederim, bu formülü nasıl elde ettiğiniz konusunda bilgi verirmisiniz rica etsem ?
for (i=1;i<n-3;i++) {x+=i*(n-3-i);}
formül bulamadım ama algoritma böyle sâdeleşebiliyor.
kâğıt kalemle kolay yapılışı ise...
n'in 4 eksiğini hesaplıyoruz. meselâ n=10 için rakamımız 6
sonra şöyle bir toplama yapıyoruz
1 * 6 +
2 * 5 +
3 * 4 +
4 * 3 +
5 * 2 +
6 * 1 = 56
sekizbit
24/05/2007, 02:27
aslında formül buldunuz, toplam sembölüde matematiğin bi ifadesi sonuçta. kodu sadeleştirmek aklıma gelmemişti teşekkür ederim.
o şekilde sadeleştrirmeyi bir kaç adım halinde gösterebilirmisiniz ?
matematik olarak yapamam çünkü matematik olarak bulmadım.
$n=10;
$x=0;
for ($i=1;$i<$n;$i++) {
for ($j=$i;$j<($n-1);$j++) {
for ($k=$j;$k<($n-3);$k++) {
echo "i: " . $i . ", j: " . $j . ", k: " . $k . "<br>\n";
$x++;
}
}
}
echo $x . "<br>\n";
yukarıdaki php kodu çalıştırdım, verdiği çıkışları inceleyerek buldum :)
sekizbit
24/05/2007, 02:54
2 tane çözüm gelince ben mesajlari birbiri ile kariştirdim :)
mustafa, sizden ricam kodu nasıl for (i=1;i<n-3;i++) {x+=i*(n-3-i);} bu hale sadeleştirdiğinizi 2-3 adım halinde yazabilirmisiniz ?
lektroon
24/05/2007, 15:11
Benim cevabim su sekilde:
for(int i = 1; i<=(n-4); i++)
x += i*(i+1)/2;
Cunku senin en icerideki dongu her seferinde,
1 den (n-4)'e yani (n-4) kere
2'den (n-4)'e yani (n-3) kere
....
(n-3)'den (n-4)'e 1 kere
Bu satirlarin sayisi da (n-4) oluyor. Dolayisiyla, (n-4) satirda her satirda kac toplama islemi yapiliyorsa, o miktara kadar toplanmali:
1+2+...+(n-4) = (n-4)*(n-3)/2
+
1+2+...+(n-5) = (n-5)*(n-4)/2
+
...
+
1+2+3 = 3*(3+1)/2
+
1+2 = 2*(2+1)/2
+
1 = 1*(1+1)/2
Bu toplama isleminde az once belirttigim gibi (n-4) satir var.
sekizbit
25/05/2007, 02:29
çözümünüz için teşekkür ederim.
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.