我正在开发一个迷你游戏,我需要找出如果输入DIN-Ax可以在DIN-A0纸上画几行。 例如:

;car horizontal and cdr vertical lines
(define A1 (list 0 1))
(define A2 (list 1 1))
(define A3 (list 1 3))
(define A4 (list 3 3))
(define A5 (list 3 7))
(define A6 (list 7 7))
(define A7 (list 7 15))
(define A8 (list 15 15))
(define A9 (list 15 31))
(define A10(list 31 31))  

如果输入A1,则可以绘制0条水平线和1条垂直线,依此类推。 我是手工计算的,但我想知道是否有更优雅的算法可以自动获得它,因为我无法开发一种算法。 这是有关DIn的更多信息: http : //en.wikipedia.org/wiki/ISO_216

谢谢

编辑:这说明了我的意思。

http://www.prepressure.com/library/paper-size/din-a4

使用A1可以绘制(0 1)表示1条垂直线。 使用A2,您可以绘制(1 1)表示1条水平线和1条垂直线,因为A0纸中有四个A2。 以此类推,以A3(1 3)...

编辑:几乎完成了,我只需要弄清楚如何处理第一次迭代,因为如果我编写(get-cuts 1 0 0 0)我得到了DIN Ax-1切口。 有更多时间我会解决。

(define (get-cuts DIN-A count vl hl)
  (cond 
    ((= DIN-A count) (list vl hl))
    ((not(= (modulo count 2) 0)) (get-cuts DIN-A (+ count 1) hl (+(* hl 2) 1))) ; DIN-A impares
    ((= (modulo count 2) 0) (get-cuts DIN-A (+ count 1) hl hl )) ; DIN-A pares
  )
)

===============>>#1 票数:1 已采纳

您想要的是一种算法,所以我做了一个:

假设对于A0,您可以绘制0条水平线(我们将其称为A0.hl )和0条垂直线(我们将其称为A0.vl )。

然后对于A1,您可以分别绘制A0.vl(A0.vl*2)+1水平线和垂直线。

与A2类似,您可以绘制A1.vl (A1的垂直线数)水平线和垂直线的数目完全相同(这是因为我们正在研究对数[2])。

因此,对于任何x> 1 ,且x%2 != 0 :对于A x,您可以绘制A x-1 .vl水平线和(A*x-2.vl* * 2) + 1垂直线。

对于x> 1x%2 == 0 ANd:对于A x,您可以绘制A x-1 .vl水平线和A x-1 .vl垂直线。

您可以通过尾递归来完成; 也许保留对数和奇数(4个变量)的水平线和垂直线的数量,但是也许有一种简单的方法不必保留所有这些变量。 我会再三考虑,但我得走了。

希望这可以帮助您获得更好的主意!

让我们有任何疑问;)

  ask by assasinx translate from so

未解决问题?本站智能推荐:

1回复

球拍中的随机树

我正在尝试从球拍中的列表创建随机树。 该树由操作员列表和终端列表组成。 输出将如下所示: 因此,可以使用eval函数调用该列表。 此外,应指定一个最大级别。 因此,我的猜测是该过程将如下所示。 我曾考虑过使用map函数并扩展每个层次的深度,但是对于像Lis
2回复

二叉树inorder遍历球拍

我正在尝试使用RACKET / DR编写用于二进制树的inorder遍历的算法。 球拍 我试图遵循以下算法 我的问题是通过COND我可以执行一个表达式,它将跳过其余的表达式。 我尝试在一个不起作用的情况下添加两个表达式,例如((a)(b))。 我也试图做一个帮助程序,但这也
2回复

方案的Dijkstra算法

我已经创建了Dijkstra算法正常工作所需的几乎所有过程,但我在最短路径过程中遇到了一些问题,我在纸上写了它,但无法使其在方案中起作用 上面是主要过程,这使我在第四行出现错误 我得到的错误是第4行上的“展开:模块中的未绑定标识符:i” 所有程序均已定义,但主要程序无法正
1回复

函数式编程惯用法可最多计算4个数字而不会在球拍/ haskell中造成突变

我计算了一个字符串中四个变量a,b,c和d中四个字符出现的次数。 现在,我想知道哪个字符出现的次数最多。 我想要一个函数式编程习惯来解决这个问题。 在Haskell中解决此问题的一种方法如下: 有人针对此问题有其他功能性编程习惯用法吗?
1回复

Minimax算法无法按预期工作

我正在使用“ 球拍领域”一书中提供的存根作为基础,为壁虱游戏创建AI。 到目前为止,一切进展顺利。 但是,当我尝试在树的根上运行minimax函数时,它会返回一个列表,其中列出了可以通过运行它获得的最低可能值(使用任一播放器作为谓词)。 这是该函数的代码转储: 这只是我的mini
1回复

如何改进此列表算法?

如果列表中有两个相邻的值与最后一个相同(三个值相同),则给出一个数字列表(字符或其他任何字符)和另一个随机数(字符或与列表相同的种类) ),则将其消除,然后递归执行。 例如 (1 5 3 3 2 2 4 3)+ 2 =>(1 5 3 3 2 2 4 3 2 )=>(1 5 3
3回复

如何计算此Fibonacci算法的效率?

我正在使用Racket(Scheme / Lisp的衍生物),我写了这个使用累加器的Fibonacci算法: 这是对不使用累加器的函数的大改进,如下所示: 但我怎么能建立递归方程来计算它是如何更有效?
2回复

Racket中的一种算法可以在列表之间进行引用的散列?

让我们考虑以下列表: 我需要进行哈希处理,其中每个第一个元素都是键,并且其值是一个列表,其中对该键的引用出现在另一个列表中。 很抱歉,我的英语不好对您有帮助...这是我期望的结果的一个示例: 如您所见, "a" (第一个列表中的第一个)由"x"提及(第二个列表中的"a"以"x"
1回复

球拍功能的统一算法?

在我的编程语言课程中,我们正在手工审查统一算法。 TA无法解决如何将统一算法应用于Racket中的nmap函数的一些示例。 有人可以向我解释如何将统一算法应用于Racket中的任何函数吗? 例如,有人可以帮助我将统一算法应用于此功能:
1回复

用名称而不是x轴上的数字在球拍中绘图

我可以使用使用球拍绘制点上显示的以下代码来绘制点 : 但是,如何绘制x轴点上具有名称而不是数字的位置: 尝试使用上面的代码会给出很长的错误消息: 如何在x轴具有组名而不是数字的情况下进行绘制?