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)

我尝试在 python 中完成它,但它很无聊,因为我在几秒钟内完成了它。因此,为了好玩,我尝试使用 DrRacket 使用方案作为语言来做到这一点。但是,在阅读有关循环的文档后,我似乎无法找到此类循环的参考。那么,使用这个具体的例子(或者我猜是一个具有无限数量循环的一般例子),如何解决这个问题?

4

2 回答 2

6

像这样的循环:

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

等效于 Racket 中的这个,假设一个看起来像这样的循环范围:1 to 20包括从 1 到(包括)20 的所有数字。

#lang racket

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

请注意,上述不限于一个嵌套循环,您可以根据需要声明尽可能多的嵌套循环和迭代变量。

于 2012-10-03T22:11:03.500 回答
0

麻省理工学院计划:

(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在 R5RS 中

但这实际上是一个数学问题,而不是编程问题。

于 2012-10-03T23:08:48.160 回答