【问题标题】:Scheme Understanding方案理解
【发布时间】:2010-09-21 21:50:35
【问题描述】:

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

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

【问题讨论】:

  • 这对你的老师来说似乎是一个很好的问题。但是我认为您要删除所有不是 6、4 或 9 的数字。因此输入 61144119 的结果将是 4、6449。您应该首先将输入转换为字符串。
  • @linuxuser27 'digit-count' 这个名字并没有暗示要删除数字。这个家庭作业问题只能使用数学来完成。
  • @erjiang - 我正在通过我认为老师所要求的概念来引导 OP。数字中的数字是 6、4、9。请告诉我如何在不将 61144119 转换为字符串或方案列表的情况下执行此操作。考虑到每个解决方案都在使用这种方法。
  • @linuxuser27 我不想放弃作业问题,但是psst在Scheme中有一个叫做“商”的函数。
  • 是的,我知道。但是看,这就是有趣的地方。您将问题解释为“特定数字中有多少 6 4 和 9 的倍数”。其他人都将其解释为“给定一个数字,它的十进制表示中有多少个 6 4 和 9 位”。因为数字 646 中有 2 个“6”和 1 个“4”。

标签: scheme


【解决方案1】:

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

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

立即获取?

【讨论】:

    【解决方案2】:

    一种解释 - 示例:

    给定678799391,对于4,位数为0,对于6,位数为1,对于9,位数为3。出现次数的总和为0 + 1 + 3 = 4

    【讨论】:

      【解决方案3】:

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

      (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 上的过程...

      【讨论】:

      • 最好使用or 而不是cond。更好——使用member。还有——string->list返回一个字符列表,所以你应该使用#\6等,而不是6
      • 感谢伊莱!我对计划还是有点陌生​​,我敢打赌你能看出来!
      【解决方案4】:

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

      以下是递归解决方案:

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

      【讨论】:

        【解决方案5】:

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

        10345 的数字为10345。我们不得不问,“469 出现了多少次?”好吧,10345 中没有 69。但是,有一个4。因此,该过程应该返回1

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

        让我们像以前一样分解它。 14289的数字为14289。没有6。但是,有19。多少?有一个1 和一个9。由于存在两个(总共)所需数字(所需数字是 469),(digit-count 14289) 应该返回 2

        更多示例:

        (digit-count 144) --> 2(有两个4

        (digit-count 1) --> 0(没有4's、6's 或9's)

        (digit-count 1262) --> 1(有一个6

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

        使用appearances,这是我们的定义(终于!):

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

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

        【讨论】:

          猜你喜欢
          • 2010-09-12
          • 1970-01-01
          • 1970-01-01
          • 2011-02-04
          • 1970-01-01
          • 1970-01-01
          • 2011-03-06
          • 2011-01-07
          • 2011-09-16
          相关资源
          最近更新 更多