2012-10-03 89 views
1

我正在爲離散數學課解決一些問題,並閱讀了引起我注意的練習(注意:這不是作業,我只是很好奇)。計劃中的循環和迭代。

問題:爲以下程序段執行「打印」語句多少次? (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) 

我試圖做到這一點在Python,但它很無聊,因爲我得到了它在幾秒鐘內完成。所以爲了好玩,我試圖用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

但這確實是一個數學問題,而不是編程問題。