0 / 0 / 0
Регистрация: 11.04.2015
Сообщений: 7
1

Запрограммируйте функцию-предикат, проверяющую, что три из четырёх цифр в числе совпадают

11.04.2015, 18:40. Показов 1834. Ответов 50
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дано натуральное четырёхзначное число, т.е. в диапазоне [1000,9999]. Запрограммируйте функцию-предикат, проверяющую, что три из четырёх цифр совпадают.

Вроде бы все просто, но я путаюсь с тем как число в список поместить... В Lispе я совсем новичок.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2015, 18:40
Ответы с готовыми решениями:

Написать функцию, проверяющую наличие в числе заданной цифры
Дано натуральное число. Написать функцию, проверяющую наличие в нем данной цифры Х, вводимой с...

Написать процедуру, проверяющую наличие в семизначном числе повторяющихся цифр, и распечатывающую в замедленном режиме
Написать процедуру, выясняющую наличие в семизначном числе повторяющихся цифр, и ...

Написать функцию , проверяющую, являются ли данные три числа взаимно простыми
Помогите пожалуйста , я вообще не знаю как

Описать функцию, функцию Test(G), проверяющую, что в группе самая высокая из женщин ниже самого высокого из мужчин
type name = (Mary, Jane, Kim, Bob, Jan, Pit, Tom, Sara); data = record male: boolean; {пол:...

50
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
16.04.2015, 16:34 41
Author24 — интернет-сервис помощи студентам
Как-то не очень мне такое решение. Цифры - не в цикле, захардкожены сочетания из 4 по 3. claire88, может, попробуете сделать с помощью delete-duplicates? Запрограммируйте функцию-предикат, проверяющую, что три из четырёх цифр в числе совпадают Просто для разнообразия.
1
castorsky
16.04.2015, 16:56
  #42

Не по теме:

helter, объясните пожалуйста мне смысл слова "захардкожено".

0
helter
16.04.2015, 17:01
  #43

Не по теме:

Захардкожено < hardcoded, внедрено непосредственно в код. В данном случае - о серии тестов внутри or.

0
1050 / 944 / 107
Регистрация: 04.11.2012
Сообщений: 974
Записей в блоге: 3
16.04.2015, 17:19 44
helter Попробовал delete-duplicates, и в чём соль?
Lisp
1
2
3
4
5
> (delete-duplicates '(1 1 1 2))
(1 2)
 
> (delete-duplicates '(1 1 2 2))
(1 2)
1
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
16.04.2015, 17:33 45
Да, ошибся я с алгоритмом.

Добавлено через 10 минут
А какой тут будет нормальный алгоритм? Можно, в принципе, просматривать цифры по одной и считать, сколько каких, пока не насчитаем три штуки. Это их надо будет где-то запоминать. Либо если сделать список - и как тогда? Самое тупое - поэлементно применить count и посмотреть, получилось ли где-нибудь 3. Однако наглядно.
1
1050 / 944 / 107
Регистрация: 04.11.2012
Сообщений: 974
Записей в блоге: 3
16.04.2015, 17:41 46
Цитата Сообщение от helter Посмотреть сообщение
Можно, в принципе, просматривать цифры по одной и считать, сколько каких, пока не насчитаем три штуки. Это их надо будет где-то запоминать.
Вы хоть читаете что другие пишут?
Запрограммируйте функцию-предикат, проверяющую, что три из четырёх цифр в числе совпадают
2
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
16.04.2015, 18:04 47
Цитата Сообщение от helter Посмотреть сообщение
где-то запоминать
hash-table )
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun sn (n)
            (let ((table (make-hash-table)))
              (labels ((fun (num table)
                         (multiple-value-bind (f s)
                             (truncate num 10)
                           (if (> f 0)
                               (fun f (and (incf (gethash s table 0)) table))
                               (progn
                                 (incf (gethash s table 0))
                                 (loop 
                                    for v being the hash-values in table
                                    thereis (= v 3)))))))
                (fun n table))))
2
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
16.04.2015, 19:17 48
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun eeq (n m
            &aux
            (s (write-to-string m))
            (u (remove-duplicates s)))
  (loop for c across u
        when (eq (count (string c) s :test #'string-equal) n)
        collect (digit-char-p c)))
 
> (eeq 3 1112)
(1)
> (eeq 3 111222)
(1 2)
Добавлено через 5 минут
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun int-digits (n) 
  (loop for c across (write-to-string n)
        collect (digit-char-p c)))
 
(defun eeq (n m
            &aux
            (s (int-digits m))
            (u (remove-duplicates s)))
  (loop for c in u
        when (eq (count c s) n)
        collect c))
 
> (eeq 3 1112)
(1)
> (eeq 3 111222)
(1 2)
3
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
18.04.2015, 11:56 49
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun eeq (n m
            &aux
            (s (loop for c across (write-to-string m)
                     collect (digit-char-p c)))
            (u (remove-duplicates s)))
  (loop for c in u
        when (eq (count c s) n)
        collect c))
 
> (eeq 3 1112)
(1)
> (eeq 3 111222)
(1 2)
3
Заблокирован
19.04.2015, 20:26 50
Lisp
1
2
3
4
5
6
(defun check (num)
  (cond ((numberp num) (check (explode num)))
        ((null num) nil)
        ((= 3 (count (car num) num))
         (cons (car num) (check (remove (car num) num))))
        ((check (remove (car num) num)))))
3
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
19.04.2015, 21:19 51
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(defun int-digits (n &optional ac)
  (if (zerop n)
      ac
      (int-digits (truncate n 10)
                  (cons (rem n 10) ac))))
 
(defun e (w n
          &optional (v (remove-duplicates w))
          &aux (a (car v)))
  (cond ((null v) nil)
        ((= (count a w) n) (cons a (e w n (cdr v))))
        ((e w n (cdr v)))))
 
(defun eeq (n m)
  (e (int-digits m) n))
 
> (eeq 3 1112)
(1)
> (eeq 3 111222)
(1 2)
Добавлено через 29 секунд
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun int-digits (n) 
  (mapcar #'digit-char-p
          (coerce (write-to-string n) 'list)))
 
(defun e (w n
          &optional (v (remove-duplicates w))
          &aux (a (car v)))
  (when v (if (= (count a w) n)
              (cons a (e w n (cdr v)))
              (e w n (cdr v)))))
 
(defun eeq (n m)
  (e (int-digits m) n))
 
> (eeq 3 1112)
(1)
> (eeq 3 111222)
(1 2)
3
19.04.2015, 21:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2015, 21:19
Помогаю со студенческими работами здесь

Найти сумму цифр двух целых двухзначных чисел a и b, написав функцию определения цифр в числе
Найти сумму цифр двух целых двухзначных чисел a и b, написав функцию определения цифр в числе.

Ввести два числа. Найти количество цифр в двух числах, используя функцию вычисления количества цифр в одном числе
Ввести два числа. Найти количество цифр в двух числах, используя функцию вычисления количества цифр...

Сколько четных цифр в данном числе. Верно ли, что в данном числе встречаются цифры А и В
Нужно написать программы(консольное приложение) в делфи самым простым способом без...

Описать функцию подсчета количества цифр в числе
Описать функцию DigitCount(К) целого типа, находящую количество цифр целого положительного числа...

Составьте программу, проверяющую, верно ли утверждение, что сумма цифр введенного вами целого числа делится на 5...
Привет! Помогите, пожалуйста с тремя задачками. 1.Ветвления 2. Циклы 3.Массив 1.Составьте...

Создать функцию, которая считает количество цифр в числе
создать функцию которая считает количество цифр в числе


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru