Понимание схемы - PullRequest
       3

Понимание схемы

0 голосов
/ 22 сентября 2010

Я должен написать функцию схемы (count-count n), которая принимает положительное целое число n и вычисляет число цифр n, равное 6, 4 или 9.

У меня проблемы с пониманием того, что именно я должен делать, меня смущают "цифры n, равные 6, 4 или 9", что это значит?

Ответы [ 5 ]

4 голосов
/ 22 сентября 2010

Это просто вопрос интерпретации, но я бы сказал, что вы берете десятичное представление числа и подсчитываете общее количество цифр, равное 6, 4 или 9. Например:

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

Получите это сейчас?

0 голосов
/ 26 сентября 2017

Во-первых, мы должны понять, что задает вопрос: он просит вас написать процедуру, которая подсчитывает, сколько раз числа 4, 6 или 9 появляются в другом введенном числе.Например, ввод 10345 должен вернуть 1.Давайте посмотрим, почему:

Цифрами 10345 являются 1, 0, 3, 4 и 5.Мы должны спросить: «Сколько раз 4, 6 или 9 появляются?»Ну, нет 6 или 9 в 10345.Однако есть один 4.Следовательно, процедура должна вернуть 1.

Другой пример: (digit-count 14289)

Давайте разберем его, как мы делали раньше.Цифры 14289: 1, 4, 2, 8 и 9.Там нет 6 х.Однако есть 1 и 9.Как много?Существует один 1 и один 9.Поскольку присутствуют две (всего) требуемых цифр (требуемые цифры 4, 6 и 9), (digit-count 14289) должен вернуть 2.

Еще несколько примеров:

(digit-count 144) -> 2 (есть два 4)

(digit-count 1) -> 0 (нет 4, 6 или 9)

(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)))

Эта функция возвращает сумму appearances из 4, appearances из 6 и appearances из 9. Пожалуйста, не стесняйтесь отвечать с любыми отзывами или вопросами!

0 голосов
/ 29 сентября 2016

Если вы не используете списки, вы можете работать с модулями % из 10 и делением целых чисел / на 10.

Ниже приведено рекурсивное решение:

(define (digits n)
(if(not (< n 1)) (+ 1 (digits (/ n 10))) 0))
0 голосов
/ 22 сентября 2010

Преобразование целого числа в список и проверка каждого из них по отдельности.

(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)))).......

Я уверен, что вы видите, куда это идет.Это довольно грубо, и я не уверен, что это действительно идиоматично, но это должно работать.

Идея состоит в том, что вы конвертируете число в список, проверяете в первую цифру, если это шесть, четыре или девять, рекурсивно вызывать процедуру в cdr списка номеров, преобразованного обратно в строку + 1 ...

0 голосов
/ 22 сентября 2010

Одна интерпретация - пример:

При заданном 678799391 количество цифр будет 0 для 4, 1 для 6 и 3 для 9.Сумма вхождений будет 0 + 1 + 3 = 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...