首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magic 1089在使用Dr.racket的方案中

Magic 1089在使用Dr.racket的方案中
EN

Stack Overflow用户
提问于 2014-10-01 15:36:56
回答 1查看 107关注 0票数 1

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

1)

代码语言:javascript
复制
(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))
EN

回答 1

Stack Overflow用户

发布于 2014-10-01 17:59:30

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

代码语言:javascript
复制
(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)))

测试:

代码语言:javascript
复制
> (magic 123)
1089
> (magic 678)
1089
> (magic 321)
1089
> (magic 546)
1089

FWIW,修改后,仍然有90个数字在100到999 (含)之间,算法不起作用:

代码语言:javascript
复制
> (for/sum ((i (in-range 100 1000)) #:when (not (= (magic i) 1089))) 1)
90
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26136359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档