【问题标题】:Magic 1089 in Scheme using Dr. Racket使用 Racket 博士的计划中的 Magic 1089
【发布时间】:2014-11-25 23:57:19
【问题描述】:

我正在尝试创建一个消耗 xyz 的程序,数字按降序排列,并产生 1089。我必须取 xyz,反转数字,确定 xyz 之间的差异,它是反向的,并将其称为 diff,添加 diff 和它是相反的,然后得到 1089 的答案。我已经尝试了几个小时,但我无法弄清楚如何创建代码。到目前为止,我只尝试了函数,但我仍然无法让它工作。我做错了什么?:

1)

(define h 100)
(define t 10)
(define o 1)

(define (front xyz)
  (number->string (substring xyz 0 1)))

(define (mid xyz)
  (number->string (substring xyz 1 2)))

(define (back xyz)
  (number->string (substring xyz 2 3)))

(define (reversexyz xyz)
  (string->number (+ (* (back xyz) h) (* (mid xyz) t) (* (front xyz) o))))

(define (diff abc)
  (- xyz (reversexyz)))

(define (frontdiff abc)
  (number->string (substring frontdiff 0 1)))

(define (middiff abc)
  (number->string (substring middiff 1 2)))

(define (backdiff abc)
  (number->string (substring backdiff 2 3)))

(define (reversediff xyz)
  (number->string (+ (* (backdiff abc) h) (* (middiff abc) t) (* (frontdiff abc) o))))

(define (magic xyz)
  (+ diff reversediff))

【问题讨论】:

    标签: string numbers scheme racket


    【解决方案1】:

    基于this explanation,这应该很简单:

    (define (pad0 str) ; add leading 0's to a string, 3 characters wide
      (~a #:width 3 #:align 'right #:left-pad-string "0" str))
    
    (define (reverse-num n) ; reverse a number
      (string->number (list->string (reverse (string->list (pad0 (number->string n)))))))
    
    (define (magic xyz) ; the magic happens here
      (define diff (abs (- (reverse-num xyz) xyz)))
      (+ diff (reverse-num diff)))
    

    测试:

    > (magic 123)
    1089
    > (magic 678)
    1089
    > (magic 321)
    1089
    > (magic 546)
    1089
    

    FWIW,经过这次修改,100到999(含)之间的数字还有90个算法不起作用:

    > (for/sum ((i (in-range 100 1000)) #:when (not (= (magic i) 1089))) 1)
    90
    

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 2023-03-26
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 2018-05-05
      • 2022-11-16
      相关资源
      最近更新 更多