方案理解

时间:2010-09-21 21:50:36

标签: scheme

我应该编写一个接受正整数n的方案函数(数字计数n),并计算n为6,4或9的位数。

我无法理解我应该做什么,我对“6位数为4,4或9的数字”感到困惑,这是什么意思?

5 个答案:

答案 0 :(得分:4)

这只是一个解释问题,但我会说你会取一个数字的十进制表示,并计算6位,4位或9位的总位数。例如:

  • 100 - > 0
  • 4 - > 1
  • 469 - > 3
  • 444 - > 3

立即获取?

答案 1 :(得分:0)

一种解释 - 例如:

给定6787993910的数字41的{​​{1}}和6的{​​{1}} }。出现的总和为3

答案 2 :(得分:0)

将整个数字转换为列表并单独检查每个数字。

(define (number->list x) 
  (string->list (number->string x))

(define (6-4-or-9 x) (cond ((= x 6) true)) ((= x 4) true)) ((= x 9) true))))

(define (count-6-4-9 x) (cond ((6-4-or-9 (car (number->list x)))).......

我相信你可以看到它的发展方向。它非常粗糙,我不确定它是不是真的,但它应该有效。

我的想法是你将数字转换为一个列表,检查第一个数字,如果它是六个,四个或九个,递归调用转换回字符串+ 1的数字列表的cdr上的过程...

答案 3 :(得分:0)

如果您没有使用列表,则可以使用10的模%并将整数/除以10。

以下是递归解决方案:

(define (digits n)
(if(not (< n 1)) (+ 1 (digits (/ n 10))) 0))

答案 4 :(得分:0)

首先,我们必须了解问题是什么:它要求您编写一个程序,计算数字4,6或9出现在另一个输入数字中的次数。例如,输入10345应返回1。让我们看看为什么:

10345的数字为10345。我们必须问,&#34; 469出现多少次?&#34;好吧,6中没有910345。但是,有一个4。因此,该过程应返回1

另一个例子:(digit-count 14289)

让我们像以前一样分手。 14289的数字为14289。没有6&#39; s。但是,有1&{39}和9。多少?有一个1和一个9。由于存在两个(总)所需数字(所需数字为469),(digit-count 14289)应返回2。< / p>

更多例子:

(digit-count 144) - &gt; 2(有两个4&#39; s

(digit-count 1) - &gt; 0(没有4&#39; s,6,或9&#39; s

(digit-count 1262) - &gt; 1(有一个6

现在,让我们开始定义。我们可以利用appearances函数,该函数接受两个输入并返回第二个输入出现的次数。 例如:(appearances 'a 'amsterdam)返回2,因为a中有两个amsterdam

使用appearances,这是我们的定义(最后!):

(define (count469 num)
  (+ (appearances 4 num)
     (appearances 6 num)
     (appearances 9 num)))

此函数返回appearances为4,appearances为6,appearances为9的总和。请随时回复任何反馈或问题!