[Arşiv] Ticaretle ilgisi olmayan saf matematik, fizik, kimya vb. beyin jimnastiği bulmacaları - sayfa 233

 
MaStak >> :

Ancak genel olarak, bazı Yunanlılar Pi \u003d 66/21

Yunan muhtemelen 22/7 (66/21 ile aynıdır) konuşuyordu.

Daha doğrusu 355/113 olacaktır (doğruluk - 3*10^(-7) ).

Bir sonraki en iyi kesir zaten 103993 / 33102'dir (sıralama doğruluğu 6*10^(-10) ).

2 Richie: Eh, VB'yi de bitirmen gerekiyordu. Peki, o zaman Metaquotes ile mi karşılaşıyorsunuz?

 
Beyler, sonunda bir yaratıcılık unsuru gösterin! Mesele pi sayısını bulmak için bu programı kullanmak değil, programın bunu nasıl yaptığını deşifre etmektir. Konuyu okuduk: "... beyni eğitmek için sorunlar ...". Bu program "Fun with C" serisindendir. C'deki en anlaşılmaz ve gizemli algoritmaları derlemek için böyle bir rekabet var. Kaynak kodu orada, sonuç orada ve çalışma prensibinin çözülmesi gerekiyor. Algoritmanın kendisi çözülmesi gereken problemdir. "hacklenmesi" gerekir. Bunu yapmak için beyninizi "kırmanız" gerekir.
 

iyi eğlenceler


 
Mischek писал(а) >>

iyi eğlenceler

Mischek , biz burada eski yüksek lisans öğrencileriyiz, 11. sınıf için değil 8. sınıf için problem çözüyoruz :)

Fakir çocuklar :(

 
C-4 >> : Сам алгоритм - это и ест задача для решения. Его надо "взломать". Для этого требуется "поломать" свой мозг.

Bunun bir sorun olduğundan şüphelendim ...

Tamam hadi görelim.

 int a = 10000 , b , c = 2800 , d , e , f [ 2801 ] , g ;
int main ( void ) {
   for ( ; b - c ; ) f [ b + + ] = a / 5 ;
   for ( ; d = 0 , g = c * 2 ; c - = 14 , printf ( "%.4d" , e + d / a ) , e = d % a )
       for ( b = c ; d + = f [ b ] * a , f [ b ] = d % - - g , d / = g - - , - - b ; d * = b ) ;
}

İlk döngü ile başa çıkmak

   for ( ; b - c ; ) f [ b + + ] = a / 5 ;

Döngü, b - c ifadesi doğru olarak değerlendirildiği sürece yürütülür. C'de doğru olan nedir? Diyelim ki, herhangi biri sıfır değildir. Bu, b'yi sıfırdan artırma ve f[] dizisini doldurma döngüsünün b, c'ye eşit olana kadar gerçekleştirildiği anlamına gelir, yani. 2800'e kadar. f[] dizisi aynı 10000/5 = 2000 sayılarıyla doldurulur.

Büyük bir hata yapana kadar mı?

 

Her neyse, Pi sayısı sadece bir şekilde hesaplanır ve geri kalan her şey farklı bir etekte bir mashka veya bir mashka'nın parçası :)

 
Mathemat >> :

Bunun bir sorun olduğundan şüphelendim ...

Tamam hadi görelim.

İlk döngü ile başa çıkmak

Döngü, b - c = true olana kadar yürütülür. C'de doğru olan nedir? Diyelim ki, herhangi biri sıfır değildir. Bu, b'yi sıfırdan artırma ve f[] dizisini doldurma döngüsünün b, c'ye eşit olana kadar gerçekleştirildiği anlamına gelir, yani. 2800'e kadar. f[] dizisi aynı 10000/5 = 2000 sayılarıyla doldurulur.

Büyük bir hata yapana kadar mı?

Haydi bağıralım.

Şimdiye kadar doğru. Daha ileriye bakalım.

 

Ve işte kafa karışıklığı. İlk başlıkta (dış döngü), d=0 koşulu bir şekilde can sıkıcıdır. Her zaman doğru mu?

 

Sonraki iç içe döngüdür. yeniden yazma:

 for ( ; g = c * 2 ; ) 
{
d = 0 ;
   for ( b = c ; - - b ; d * = b )
{
d + = f [ b ] * a ;
g
--;
 f [ b ] = d % g;
 d / = g ;
g - - ;
}
c - = 14 ;
printf ( "%.4d" , e + d / a ) ;
e = d % a;
}
Burada sıra özellikle önemlidir. Bak, henüz yalan söylemedim mi?
Sonra daha ileri gideceğiz.

// aslında için ( ; g = c * 2 ; ) bu baskıda çok daha iyi görünecek: için ( g = c * 2 ; g != 0 ; )
 
Mathemat >> :

Ve işte kafa karışıklığı. İlk başlıkta (dış döngü), d=0 koşulu bir şekilde can sıkıcıdır. Her zaman doğru mu?

Evet, C'de kesinlikle (ve d buna şahittir) SON ifadesinin doğruluğu için kontrol edilir.