여러분, 드디어 창의력의 요소를 보여주세요! 요점은 이 프로그램을 사용하여 숫자 파이를 찾는 것이 아니라 프로그램이 어떻게 했는지 해독하는 것입니다. 우리는 "... 두뇌 훈련을위한 문제 ..."라는 주제를 읽습니다. 이 프로그램은 "Fun with C" 시리즈입니다. C에서 가장 이해하기 어렵고 신비한 알고리즘을 컴파일하기 위한 경쟁이 있습니다. 소스 코드가 있고 결과가 있고 작동 원리를 풀어야 합니다. 알고리즘 자체가 해결해야 할 문제입니다. "해킹"해야합니다. 이렇게 하려면 뇌를 "파괴"해야 합니다.
C-4>> : Сам алгоритм - это и ест задача для решения. Его надо "взломать". Для этого требуется "поломать" свой мозг.
글쎄, 나는 이것이 문제라고 의심했다 ...
좋아, 보자.
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 );}
첫 번째 주기 다루기
for(; b - c ;) f [ b ++]= a /5;
루프는 b - c 표현식이 true로 평가되는 동안 실행됩니다. C에서 옳은 것은? 모든 것은 0이 아닙니다. 이것은 b가 0에서 증가하고 배열 f[]를 채우는 사이클이 b가 c와 같을 때까지 수행됨을 의미합니다. 최대 2800. 배열 f[]는 동일한 숫자 10000/5 = 2000으로 채워집니다.
루프는 b - c = true가 될 때까지 실행됩니다. C에서 옳은 것은? 모든 것은 0이 아닙니다. 이것은 b가 0에서 증가하고 배열 f[]를 채우는 사이클이 b가 c와 같을 때까지 수행됨을 의미합니다. 최대 2800. 배열 f[]는 동일한 숫자 10000/5 = 2000으로 채워집니다.
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; }
여기서 순서가 특히 중요합니다. 나 아직 거짓말 안했어? 그럼 더 진행하겠습니다.
// 실제로 (; g = c *2;) 이 버전에서 훨씬 더 좋아 보일 것입니다: g = c *2;g != 0 ; )
일반적으로 MQL 개발자에게는 불쾌감을 주지 않지만 수학 함수의 수는 https://docs.mql4.com/en/math 입니다.
제 생각에는 부끄럽게도 VB에서는 거의 없습니다. 그리고 MathFloor와 같은 일부 정의는 모호 합니다.
-
MathMax 함수를 살펴보겠습니다. 인수는 2개뿐입니다. 그리고 10이나 20이 필요하면 어떻게 될까요?
이것은 내 모듈이 있는 VB에서 보이는 것입니다.
-
x=max(x1...x20) '변수 20개의 최대값을 찾습니다.
x=max(x1, y, z, p) '변수 4개의 최대값을 구합니다.
그러나 일반적으로 일부 그리스어는 Pi \u003d 66/21
그리스어는 22/7(66/21과 동일)로 말했을 것입니다.
더 정확하게는 355/113(정확도 - 3*10^(-7) )입니다.
차상위 분수는 이미 103993 / 33102입니다(순서 정확도 6*10^(-10) ).
2 Richie: 음, 그리고 당신은 VB를 끝내야 했습니다. 글쎄, 당신은 Metaquote를 실행합니까?
재미
재미
Mischek , 우리는 여기에서 전 대학원생이고 11 학년이 아니라 8 학년을 위해 문제를 해결합니다 :)
불쌍한 아이들 :(
글쎄, 나는 이것이 문제라고 의심했다 ...
좋아, 보자.
첫 번째 주기 다루기
루프는 b - c 표현식이 true로 평가되는 동안 실행됩니다. C에서 옳은 것은? 모든 것은 0이 아닙니다. 이것은 b가 0에서 증가하고 배열 f[]를 채우는 사이클이 b가 c와 같을 때까지 수행됨을 의미합니다. 최대 2800. 배열 f[]는 동일한 숫자 10000/5 = 2000으로 채워집니다.
큰 실수를 할 때까지?
어쨌든 Pi는 한 가지 방법으로만 계산되며 나머지는 모두 다른 스커트의 mashka 또는 mashka의 일부입니다. :)
글쎄, 나는 이것이 문제라고 의심했다 ...
좋아, 보자.
첫 번째 주기 다루기
루프는 b - c = true가 될 때까지 실행됩니다. C에서 옳은 것은? 모든 것은 0이 아닙니다. 이것은 b가 0에서 증가하고 배열 f[]를 채우는 사이클이 b가 c와 같을 때까지 수행됨을 의미합니다. 최대 2800. 배열 f[]는 동일한 숫자 10000/5 = 2000으로 채워집니다.
큰 실수를 할 때까지?
자, 외쳐봅시다.
지금까지는 맞습니다. 더 살펴보겠습니다.
그리고 여기에 혼란이 있습니다. 첫 번째 캡(외부 루프)에서 d=0 조건은 다소 짜증스럽습니다. 항상 사실인가요?
다음은 중첩 루프입니다. 다시 쓰기: