2012-10-03 6 views
1

필자는 이산 수학 수업에서 몇 가지 문제를 해결하고 나의주의를 끄는 운동을 읽었습니다 (참고 : 이것은 숙제가 아니라 단지 순전히 궁금합니다).체계의 루프 및 반복.

질문 : 다음 프로그램 세그먼트에 대해 "print"문이 몇 번 실행됩니까? (I, J, K, m은 정수) :

for i := 1 to 20 do 
    for j := 1 to i do 
     for k := 1 to j do 
      for m := 1 to k do 
       print (i * j) + (k * m) 

나는 파이썬에서 그것을 시도,하지만 난 그게 몇 초에서 수행 얻었 기 때문에 그것은 지루했다. 그래서 재미로 나는 언어로 계획을 사용하여 DrRacket으로 그것을 시도했다. 그러나 루프에 대한 설명서를 읽은 후에는 이러한 종류의 루프에 대한 참조를 찾을 수 없습니다. 따라서이 특정 예제를 사용하여 (또는 무수히 많은 수의 루프가있는 일반적인 것)이 문제를 어떻게 해결할 수 있습니까? 이런

답변

6

루프 :

for i := 1 to 20 do 
    for j := 1 to i do 
     print [i, j] 

이 보이는 루프 범위 가정 라켓이 동등하다 : 1 to 20는 1까지의 모든 숫자를 포함하고 (포함) 20

#lang racket 

(for* ((i (in-range 1 21)) 
     (j (in-range 1 (add1 i)))) 
    (displayln (list i j))) 

위의 내용은 하나의 중첩 루프에 국한되지 않고 필요에 따라 여러 개의 중첩 루프 및 반복 변수를 선언 할 수 있습니다.

0

MIT 계획 :

(do ((cnt 0) (i 1 (+ i 1))) ((> i 20) cnt) 
    (do ((j 1 (+ 1 j))) ((> j i)) 
    (do ((k 1 (+ 1 k))) ((> k j)) 
     (do ((m 1 (+ 1 m))) ((> m k)) 
     (set! cnt (+ 1 cnt)))))) 
;Value: 8855 

do is in R5RS.

그러나 이것은 실제로 수학 문제이며 프로그래밍 문제는 아닙니다.