Дедка бабка репка сказка ребус


0

Как решить пример дедка+бабка+репка=сказка­, заменив буквы цифрами?

В примере — криптарифме

ДЕДКА+БАБКА+РЕПКА=СК­<wbr />АЗКА

замените буквы цифрами, так чтобы одинаковым буквам соответствовали одинаковые цифры и математическое равенство было верным.

1 ответ:



2



0

Записываем в столбик

и замечаем что последняя буква это буква А

для последнего разряда получаем А+А+А=3*А=А

это возможно только если А=0

для предпоследнего разряда получаем К+К+К=К

Это возможно только если К=5 (5+5+5=3*5=15) единица переносится в новый разряд

Для разряда тысяч получаем:

Е+А+Е=А (Е+0+Е=2*Е=0) Е не может равняться 5 (потому что К=5)

учитывая что 2*Е четное число и возможен перенос (числа 2) из предыдущего разряда 2*Е+2=10 тогда получаем для 2*Е=8 ; Е=4

буквы Д,Б,Р могут иметь разные значения из оставшихся цифр.

В итоге получим несколько решений:

  1. Д=7; Е=4; К=5; А=0; Б=9; Р=8; П=6; С=2; З=3 (74750+90950+84650=2­<wbr />50350)
  2. Д=8; Е=4; К=5; А=0; Б=9; Р=7; П=3; С=2; З=1 (84850+90950+74350=2­<wbr />50150)
  3. Д=9; Е=4; К=5; А=0; Б=7; Р=8; П=6; С=2; З=3 (94950+70750+84650=2­<wbr />50350)
  4. Д=9; Е=4; К=5; А=0; Б=8; Р=7; П=3; С=2; З=1 (94950+80850+74350=2­<wbr />50150)

Читайте также

Решаем составляя наборы допустимых значений для каждого разряда и затем записываем получившиеся решения примера:

РОЗА+РОЗА+РОЗА+ВАЗ­<wbr />А=БУКЕТ

Используются все цифры и получается большое разнообразие вариантов, можно выбрать решение практически на любой вкус.

  1. 2084+2084+2084+9484=­<wbr />15736 Р=2; О=0; З=8; А=4; В=9; Б=1; У=5; К=7; Е=3; Т=6
  2. 2385+2385+2385+9585=­<wbr />16740 Р=2; О=3; З=8; А=5; В=9; Б=1; У=6; К=7; Е=4; Т=0
  3. 2945+2945+2945+7545=­<wbr />16380 Р=2; О=9; З=4; А=5; В=7; Б=1; У=6; К=3; Е=8; Т=0
  4. 3927+3927+3927+4727=­<wbr />16508 Р=3; О=9; З=2; А=7; В=4; Б=1; У=6; К=5; Е=0; Т=8
  5. 3942+3942+3942+5242=­<wbr />17068 Р=3; О=9; З=4; А=2; В=5; Б=1; У=7; К=0; Е=6; Т=8
  6. 4073+4073+4073+6373=­<wbr />18592 Р=4; О=0; З=7; А=3; В=6; Б=1; У=8; К=5; Е=9; Т=2
  7. 4592+4592+4592+3292=­<wbr />17068 Р=4; О=5; З=9; А=2; В=3; Б=1; У=7; К=0; Е=6; Т=8
  8. 4819+4819+4819+5919=­<wbr />20376 Р=4; О=8; З=1; А=9; В=5; Б=2; У=0; К=3; Е=7; Т=6
  9. 5319+5319+5319+4919=­<wbr />20876 Р=5; О=3; З=1; А=9; В=4; Б=2; У=0; К=8; Е=7; Т=6
  10. 5796+5796+5796+3696=­<wbr />21084 Р=5; О=7; З=9; А=6; В=3; Б=2; У=1; К=0; Е=8; Т=4
  11. 5874+5874+5874+3474=­<wbr />21096 Р=5; О=8; З=7; А=4; В=3; Б=2; У=1; К=0; Е=9; Т=6
  12. 7409+7409+7409+5909=­<wbr />28136 Р=7; О=4; З=0; А=9; В=5; Б=2; У=8; К=1; Е=3; Т=6
  13. 7452+7452+7452+9252=­<wbr />31608 Р=7; О=4; З=5; А=2; В=9; Б=3; У=1; К=6; Е=0; Т=8
  14. 8504+8504+8504+7404=­<wbr />32916 Р=8; О=5; З=0; А=4; В=7; Б=3; У=2; К=9; Е=1; Т=6
  15. 8509+8509+8509+1909=­<wbr />27436 Р=8; О=5; З=0; А=9; В=1; Б=2; У=7; К=4; Е=3; Т=6
  16. 8704+8704+8704+3404=­<wbr />29516 Р=8; О=7; З=0; А=4; В=3; Б=2; У=9; К=5; Е=1; Т=6
  17. 8915+8915+8915+7515=­<wbr />34260 Р=8; О=9; З=1; А=5; В=7; Б=3; У=4; К=2; Е=6; Т=0
  18. 9418+9418+9418+6818=­<wbr />35072 Р=9; О=4; З=1; А=8; В=6; Б=3; У=5; К=0; Е=7; Т=2
  19. 9506+9506+9506+8606=­<wbr />37124 Р=9; О=5; З=0; А=6; В=8; Б=3; У=7; К=1; Е=2; Т=4
  20. 9762+9762+9762+1262=­<wbr />30548 Р=9; О=7; З=6; А=2; В=1; Б=3; У=0; К=5; Е=4; Т=8

Ребус «ДРАМА» + «ДРАМА» = «ТЕАТР» решаем так.

В словах «ДРАМА» и «ТЕАТР» по 5 (пять) букв. Значит цифры надо подобрать так, чтобы при сложении «Д» не было переноса десятков и добавления нового старшего ряда.

Оба слова имеют одинаковые буквы «А» и «Р», соответственно это должны быть одинаковые цифры вместо букв.

Пробуем искать подходящие цифры для ребуса: «ДРАМА» + «ДРАМА» = «ТЕАТР».

1) «А» + «А» = «Р» и «А» + «А» = «А» невозможно.

Здесь при сложении «А» должно получится двухзначное число, чтобы перенести единицу.

«А» + «А» должно быть равно цифре от 5 до 9.

Значит: «А» + «А» + 1= 10 + «А»

«А» + «А» — «А» = 10 — 1

«А» = 9

2) Следовательно: «А» + «А» + 18, «Р» = 8 (и перенос единицы).

3) Третья буква «А» при сложении даст перенос единицы, поэтому:

«Р» + «Р» + 1 = 8 + 8 + 1 = 17

Тогда «Е» равна 7 (и перенос единицы).

4) Буква «М» должна дать перенос единицы, поэтому там предполагаемая цифра от 5 до 9.

Мы уже знаем, что цифры 7, 8, и 9 заняты. Значит: 5 или 6.

При «М» равном 5 + 1 (перенос единицы),

получилось бы: 5 + 5 + 1, что «Т» равно 1, но это невозможно.

Потому что «Д» + «Д» + 1 (перенос единицы) не может быть равно 1.

Выяснили, что «М» равна 6 (и перенос единицы).

5) Легко находим оставшиеся цифры, вместо букв: «Д» = 1 и «Т» = 3.

Получилось:

«Д» = 1, «Р» = 8, «А» = 9, «М» = 6, «А» = 9.

«Т» = 3, «Е» = 7, «А» = 9, «Т» = 3, «Р» = 8.

Правильно составить такой пример: 18969 + 18969 = 3 7938

Решаем ребус «ГОРА» + «ОГОНЬ» = «ВУЛКАН», подставляя цифры вместо букв, так:

«ГОРА» слово из 4-рёх букв,

«ОГОНЬ» слово из 5-ти букв,

«ВУЛКАН»слово из 6-ти букв.

Есть повторяющиеся буквы «Г», «О», «А», Н», следовательно будут повторяющиеся цифры.

10 разных букв, значит используем цифры от 0 до 9.

Подставляем цифры вместо букв: «ГОРА» + «ОГОНЬ» = «ВУЛКАН».

1) Чтобы, путём сложения четырёхзначного и пятизначного чисел, получить шестизначное число,

буква «О» должна равняться 9, а сумма «Г» + «Г» должна быть двухзначным числом,

чтобы перенести единицу и получить 9 + 1 = 10.

2) Следовательно «У» = 0, а «В» = 1.

3) Буква «К» = «О» + «О» = 9 + 9 = 18. Пишем «К» = 8 и переносим 1.

4) Знаем, что сумма «Г» + «Г», это двухзначное число.

Значит выбираем из цифр 5, 6, 7.

Буква «Г» не будет 5, так как «Л» = «Г» + «Г» + 1 = 5 + 5 + 1 = 11, а цифра 1 уже занята.

Если «Г» = 6, то «Л» = «Г» + «Г» + 1 = 6 + 6 + 1 = 13, тогда «Л» = 3 и переносим 1.

Остались цифры: 2, 4, 5, 7 и буквы «Р», «А», «Н», «Ь».

5) «А» + «Ь» = «Н»

«Р» + «Н» = «А»

Путём подбора, получаем «А» = 7, «Ь» = 5.

«Н» = 7 + 5 = 12, значит «Н» = 2 и переносим 1.

Осталась последняя цифра: «Р» = 4.

«А» = 4 + 2 + 1 = 7

Подставляем цифры и проверяем:

«Г» = 6, «О» = 9, «Р» = 4, «А» = 7.

«О» = 9, «Г» = 6, «О» = 9, «Н» = 2, «Ь» = 5.

«В» = 1, «У» = 0, «Л» = 3, «К» = 8, «А» = 7, «Н» = 2.

6.947 + 96.925 = 103.872 — Ответ получился верный.

Все цифры от 0 до 9 задействовать не получится, потому что в выражении используется всего 6 различных букв, значит может быть использовано только 6 цифр.

Решением криптарифма

КНИГА+КНИГА+КНИГА=НАУКА

будет

К=2

Н=8

И=3

Г=7

А=5

У=1

а после расшифрвки выражение примет вид

28375+28375+28375=85125

Верное решение 85679 + 85679 = 171358.

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

Поэтому стоит начинать с самого начала.

Можно сразу предположить, что С=1, поскольку при сложении получаем слово из шести букв.

После этого можно предположить, что А=5, поскольку после сложения мы получаем 1, а она не может быть результатом суммы, значит, она просто съехала с предыдущего сложения.

Перейдем к букве О. После сложения двух таких букв мы получаем 5. Поскольку результатом суммы может быть только четное число, значит, единица пришла из предыдущего сложения, а чистая сумма — 4. А О=2. Но тогда не сходится. В+В=О. Мы уже знаем, что после сложения пятерок сносится единица. И число должно быть нечетным. Тогда предполагаем, что О=7.

Возвращаемся к В. В=В+1= 17. А значит, В=8.

Отсюда — Н=9, это крайние цифры, иначе быть не может, ведь нам надо снести единицы.

Г=6, ее я уже подобрала по оставшимся цифрам. А Т=3, результат суммы и снесенной единицы.

 

Доброго здоровья всем!
Помогите пожалуйста решить детскую задачку по математике с помощью Эксель.
Когда-то  в школе в виде дополнительного задания на дом дали следующую задачу:
УДАР+УДАР =ДРАКА.
Надо вместо букв подставить цифры, чтобы выражение было верно. (Одна буква=одна цифра). Да и на олимпиадах такие задачи были в средних классах. Первый раз я её долго делал (типа перебором). Позже понял, что такие задачи решаются за несколько минут путем логических рассуждений. Наверно, чтобы  решить её при помощи Эксель надо гораздо больше времени (Мне так кажется). Как это сделать при помощи формул вообще не представляю (в формулах не силен). Макросом можно попробовать, но никогда такие задачи не решал. Обычно берем данные с листа, что-то делаем с ними и выгружаем на лист. Очень хотелось бы посмотреть, как это сделать в Эксель.
Заранее благодарен за предложенные варианты (Формула или макрос без использования всяких надстроек)

P.S. Для разнообразия и проверки универсальности решения КИС+КСИ=ИСК

Изменено: Евгений Смирнов15.01.2022 15:30:03
(Исправил ошибку в последней строке)

 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

#2

15.01.2022 11:10:54

Можно решить через «Поиск решения», но считает не очень быстро: 8126 + 8126 = 16252
Удар.xlsx (11.41 КБ)

Цитата
Евгений Смирнов написал: КИС+КСИ=ИКС

Скорее всего записано с ошибкой, т.к. С+И=С, только при И=0, но ноль не может стоять в ИКС первым разрядом

 

Тимофеев

Пользователь

Сообщений: 1180
Регистрация: 01.09.2020

ИСК

Прикрепленные файлы

  • ИСК.PNG (219.06 КБ)

 

MCH Да последнее выражение с ошибкой =ИСК ( Ну более 40 лет прошло подзабыл к сожалению не всё помню со школы)
Ваш файл глянул но пока не понял сейчас некогда разбираться. В принципе наверно лучше это как-то кодом сделать чем поиском решения в принципе комп и методом подбора может сделать. Главное правильно условия проверки прописать

 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

«Поиск решения» долго считает и не всегда находит решение, можно сделать полный перебор на VBA

 

MCH Ну я вот пока не представляю как полный перебор в VBA сделать

Изменено: Евгений Смирнов15.01.2022 11:30:24

 

Тимофеев

Пользователь

Сообщений: 1180
Регистрация: 01.09.2020

#7

15.01.2022 13:11:58

Решение математических буквенно-числовых ребусов в Excel.
(Криптоарифметическая задача)

Код
Для удара (каникулярная задача) можно так (2Удара=Драка):
=ИНДЕКС(СТРОКА(1000:9999);
ПОИСКПОЗ(ИСТИНА;2*СТРОКА(1000:9999)=--(ПСТР(СТРОКА(1000:9999);2;1)&ПСТР(СТРОКА(1000:9999);4;1)&
ПСТР(СТРОКА(1000:9999);3;1)&A10&ПСТР(СТРОКА(1000:9999);3;1));0))

для 3 буквенных так же формирование 3-ех вспомогательных массивов, но тут попроще буквы все повторяются:
КИС: =СТРОКА(100:999)
КСИ: =ПСТР(СТРОКА(100:999);1;1)&ПСТР(СТРОКА(100:999);3;1)&ПСТР(СТРОКА(100:999);2;1)
ИСК: =ПСТР(СТРОКА(100:999);2;1)&ПСТР(СТРОКА(100:999);3;1)&ПСТР(СТРОКА(100:999);1;1)
в 3-ем ищем сумму первых 2-ух: =СТРОКА(100:999)--(ПСТР(СТРОКА(100:999);1;1)&ПСТР(СТРОКА(100:999);3;1)&ПСТР(СТРОКА(100:999);2;1))

Прикрепленные файлы

  • Пример.xlsx (10.73 КБ)

Изменено: Тимофеев15.01.2022 14:10:47

 

Тимофеев классно. Я даже предположить не мог, что кто-то напишет формулу, ждал решение макросом. Теперь мне с ней месяц разбираться.

P.S. Не скучайте через месяц вернусь. Пошел разбираться с формулой

Изменено: Евгений Смирнов15.01.2022 14:18:01

 

БМВ

Модератор

Сообщений: 20833
Регистрация: 28.12.2016

Excel 2013, 2016

Мне не очень нравится вариант провеки исползуемый в №7 но всеж модифицируем чтоб небыло доп столбцов  и ячеек.
=SUM(IFERROR(MMULT(ROW(1000:9999)*(2*ROW(1000:9999)=—(MID(ROW(1000:9999);2;1)&MID(ROW(1000:9999);4;1)&MID(ROW(1000:9999);3;1)&COLUMN(A:J)-1&MID(ROW(1000:9999);3;1)));ROW(1:10)^0);))

Изменено: БМВ15.01.2022 16:06:26

По вопросам из тем форума, личку не читаю.

 

Прошу прощения, но вчера не все сообщения посмотрел внимательно (Времени не было). Сегодня исправляюсь.
Тимофеев Вы просто умница и формулу написали и с карандашом можете решить Браво!!!.  В способностях БМВ я уже давно не сомневаюсь. Обе формулы рабочие. Использование подбора параметра для решения наверно можно, но скорее всего надо еще какие формулы добавлять. Только целевая формула это мало. Раз формулы от Тимофеева и БМВ практически мгновенно выдают результат, то и другие методы при правильном наборе входных параметров и условий должны сразу давать результат.
Еще раз благодарю всех кто откликнулся и потратил своё драгоценное время на эту тему.

 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

#11

16.01.2022 09:30:50

Решение на VBA под конкретную задачу:

Код
Sub main()
    Dim u, d, a, r, k
    For u = 5 To 9
        d = 1
        For r = 2 To 9
            If r <> u Then
                a = r * 2 Mod 10
                If a <> u And a <> r Then
                    For Each k In Array(0, 2, 3, 4, 5, 6, 7, 8, 9)
                        If k <> u And k <> a And k <> r Then
                            If (u * 1000 + d * 100 + a * 10 + r) * 2 = d * 10000 + r * 1000 + a * 100 + k * 10 + a Then
                                MsgBox u & d & a & r & " + " & u & d & a & r & " = " & d & r & a & k & a
                                Exit Sub
                            End If
                        End If
                    Next k
                End If
            End If
        Next r
    Next u
End Sub

Для общей задачи можно перебрать все размещения из 10 по 5 и прорешать каждый вариант, количество вариантов не очень большое (10!/5 ! = 30240)

 

MCH Здравствуйте. Вы видимо настойчивый все-таки написали макрос, не пожалели время. Мне проще с макросом, с ним точно разберусь. По формулам не тяну до БМВ и Тимофеева.
Спасибо огромное за помощь и мое сэкономленное время.

PS С кодом разобрался быстро. В принципе несложно. Просто никогда не видел такого. Там только небольшой недочет. Присвоение значения переменной d надо сразу писать после объявления переменных (зачем 5 раз гонять в цикле)

Изменено: Евгений Смирнов16.01.2022 14:55:14

 

Светлый

Пользователь

Сообщений: 487
Регистрация: 07.03.2019

#13

16.01.2022 17:18:51

Упрощённая формула массива (не универсальная):

Код
=МАКС(СТРОКА(5000:9999)*(ПСТР(СТРОКА(5000:9999)*2;5;1)=ПСТР(СТРОКА(5000:9999);3;1))*(ПСТР(СТРОКА(5000:9999)*2;3;1)=ПСТР(СТРОКА(5000:9999);3;1))*(ПСТР(СТРОКА(5000:9999)*2;2;1)=ПСТР(СТРОКА(5000:9999);4;1))*(ПСТР(СТРОКА(5000:9999)*2;1;1)=ПСТР(СТРОКА(5000:9999);2;1)))
 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

#14

16.01.2022 18:52:04

Универсальный способ, подходящий для любого подобного ребуса
АТАКА + УДАР + УДАР = НОКАУТ
93989 + 7492 + 7492 = 108973

Перебираем все размещения из 10 по 8, проверяем на правильность отдельной функцией (здесь как раз можно настроить любую проверку, под любой ребус)
если есть решение — выводим результат
С поиском решения справляется за пару секунд

Код
'АТАКА + УДАР + УДАР = НОКАУТ

Sub mainSet()
    Dim n As Long, m As Long, i As Long, txt As String, a() As Long

    n = 10
    m = 8
    ReDim a(1 To m) As Long
    For i = 1 To m: a(i) = i: Next i
    Do
        txt = CheckWords(a(1) - 1, a(2) - 1, a(3) - 1, a(4) - 1, a(5) - 1, a(6) - 1, a(7) - 1, a(8) - 1)
        If txt <> "" Then
            Debug.Print txt
            MsgBox txt
            Exit Do
        End If
    Loop While NextSet(a(), n, m)
End Sub

Function CheckWords(a As Long, t As Long, k As Long, u As Long, d As Long, r As Long, n As Long, o As Long) As String
    If a = 0 Or u = 0 Or n = 0 Then Exit Function
    If a * 10101 + t * 1000 + k * 10 + (u * 1000 + d * 100 + a * 10 + r) * 2 = _
        n * 100000 + o * 10000 + k * 1000 + a * 100 + u * 10 + t Then _
        CheckWords = a & t & a & k & a & " + " & u & d & a & r & " + " & u & d & a & r & " = " & n & o & k & a & u & t
End Function

Function NextPerm(a() As Long, n As Long) As Boolean  'следующая перестановка в лексикографическом порядке
    Dim i As Long, k As Long, t As Long, tmp As Long
    For k = n - 1 To 1 Step -1
        If a(k) < a(k + 1) Then Exit For
    Next k
    If k Then
        For i = n To k + 1 Step -1
            If a(k) < a(i) Then tmp = a(k): a(k) = a(i): a(i) = tmp: Exit For
        Next i
        NextPerm = True
    End If
    t = n
    For i = k + 1 To (n + k)  2
        tmp = a(i): a(i) = a(t): a(t) = tmp
        t = t - 1
    Next i
End Function

Function NextSet(a() As Long, n As Long, m As Long) As Boolean 'следующее размещение
    Dim b() As Long, c() As Boolean, i As Long, j As Long
    ReDim b(1 To n) As Long, c(1 To n) As Boolean
    For i = 1 To m
        b(i) = a(i)
        c(a(i)) = True
    Next i
    For j = n To 1 Step -1
        If Not c(j) Then
            b(i) = j
            i = i + 1
        End If
    Next j
    NextSet = NextPerm(b, n)
    For i = 1 To m
        a(i) = b(i)
    Next i
End Function
 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

Еще варианты, решенные данным способом:
ВЕТКА + ВЕТКА = ДЕРЕВО
74235 + 74235 = 148470

ДЕДКА + БАБКА + РЕПКА = СКАЗКА
74750 + 90950 + 84650 = 250350

КОРОВА + ТРАВА + ДОЯРКА = МОЛОКО
140498 + 60898 + 542018 = 743414
540498 + 60898 + 142058 = 743454

 

Здравствуйте Светлый  Спасибо за отклик. Насколько я понял у вас немного урезан диапазон перебора значений конкретно для этой задачи. Когда писал тему думал будет куча макросов, а оказалось наоборот макрос только MCH пишет, а формул уже 3. Хотя я больше склоняюсь к решению макросом, с ними мне проще.

 

MCH Здравствуйте. Классно!!! Спасибо. Меня совсем лишили возможности, что-то написать самому. Кстати первый макрос очень быстро работает. Я так и не смог замерить время, показывает одни нули после запятой. Формулы все таки чуток заметно, что считают. Поэтому для этой задачи все-таки лучше решение макросом. Сейчас попробовал с карандашом одно выражение решить, за 5 минут не получилось. Давно уже не решал. Вообщем разобрал выражение
ДЕДКА + БАБКА + РЕПКА = СКАЗКА
Здесь не единственное решение есть ещё (Возможно какое-то пропустил)
74750+80850+94650=250250
84850+70750+94650=250250
Исходя из этого может не стоит останавливать цикл, а сохранить первое решение и продолжить поиск и вывести все решения, тогда можно использовать макрос для написания таких ребусов с единственным решением.
С последним вашим макросом пока еще не разбирался.

 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

#18

17.01.2022 08:28:36

Цитата
написал:
84850+70750+94650=250250

«С»<>»З»

Цитата
написал:
Здесь не единственное решение есть ещё (Возможно какое-то пропустил)

4 решения для задачи: ДЕДКА + БАБКА + РЕПКА = СКАЗКА
74750 + 90950 + 84650 = 250350
84850 + 90950 + 74350 = 250150
94950 + 70750 + 84650 = 250350
94950 + 80850 + 74350 = 250150

 

MCH Последний макрос все решения выводит? Я сам еще не разбирался.

 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

#20

17.01.2022 09:01:41

Цитата
Евгений Смирнов написал:
MCH Последний макрос все решения выводит?

В такой интерпретации (сделал перестановки 10 цифр, т.к. используется 9 цифр, убрал перебор размещений), выводит все варианты

Код
Sub main()
    Const n As Long = 10
    Dim i As Long, a() As Long, tmr As Single
    ReDim a(1 To n) As Long
    
    tmr = Timer
    For i = 1 To n: a(i) = i - 1: Next i
    Do
        CheckWords a(1), a(2), a(3), a(4), a(5), a(6), a(7), a(8), a(9)
    Loop While NextPerm(a(), n)
    Debug.Print Timer - tmr
End Sub

Sub CheckWords(d As Long, e As Long, k As Long, a As Long, b As Long, r As Long, p As Long, s As Long, z As Long)
    If d = 0 Or b = 0 Or r = 0 Or s = 0 Then Exit Sub
    If d * 10000 + e * 1000 + d * 100 + k * 10 + a + _
       b * 10000 + a * 1000 + b * 100 + k * 10 + a + _
       r * 10000 + e * 1000 + p * 100 + k * 10 + a = _
       s * 100000 + k * 10000 + a * 1000 + z * 100 + k * 10 + a Then _
        Debug.Print d & e & d & k & a & " + " & b & a & b & k & a & " + " & r & e & p & k & a & " = " & s & k & a & z & k & a
End Sub

Function NextPerm(a() As Long, n As Long) As Boolean  'следующая перестановка в лексикографическом порядке
    Dim i As Long, k As Long, t As Long, tmp As Long
    For k = n - 1 To 1 Step -1
        If a(k) < a(k + 1) Then Exit For
    Next k
    If k Then
        For i = n To k + 1 Step -1
            If a(k) < a(i) Then tmp = a(k): a(k) = a(i): a(i) = tmp: Exit For
        Next i
        NextPerm = True
    End If
    t = n
    For i = k + 1 To (n + k)  2
        tmp = a(i): a(i) = a(t): a(t) = tmp
        t = t - 1
    Next i
End Function

Перебор всех перестановок — 10! (3,6 млн комбинаций) — 3 секунды
Если нужен перебор размещений (если используется менее 9 цифр) — см. предыдущую реализацию, можно сократить количество комбинаций для перебора

Изменено: MCH17.01.2022 09:08:11

 

MCH Спасибо огромное!!! На пару дней вы меня загрузили.  С этим макросом сходу не могу разобраться первый был простой. Но я упертый, буду разбираться до полной победы.

 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

#22

17.01.2022 12:05:24

Полный перебор всех комбинаций
УДАР + УДАР = ДРАКА
8126 + 8126 = 16252
0,3 секунды

Скрытый текст

 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

#23

17.01.2022 13:16:50

ОТВЕТ + ОЧЕНЬ = ПРОСТ:
16476 + 18720 = 35196
18478 + 16720 = 35198
21651 + 27580 = 49231
24384 + 26890 = 51274
26386 + 24890 = 51276
27657 + 21580 = 49237
27937 + 28310 = 56247
28938 + 27310 = 56248
32582 + 34810 = 67392
34214 + 35170 = 69384
34584 + 32810 = 67394
35125 + 39260 = 74385
35215 + 34170 = 69385
39129 + 35260 = 74389
42132 + 45360 = 87492
42312 + 47150 = 89462
43763 + 48650 = 92413
45135 + 42360 = 87495
47317 + 42150 = 89467
48768 + 43650 = 92418

Скрытый текст

 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

#24

17.01.2022 13:25:09

НИТКА + НИТКА = ТКАНЬ
15306 + 15306 = 30612

Скрытый текст

 

БМВ

Модератор

Сообщений: 20833
Регистрация: 28.12.2016

Excel 2013, 2016

Off
Михаил сел на коНьбинаторику , теперь его долго от туда долго не снять будет.   :D

По вопросам из тем форума, личку не читаю.

 

MCH

Пользователь

Сообщений: 3870
Регистрация: 22.12.2012

#26

17.01.2022 14:23:22

Цитата
БМВ написал:
сел на коНьбинаторику

Я другим не запрещаю на нее садиться, пусть тоже едут

Цитата
Евгений Смирнов написал:
С этим макросом сходу не могу разобраться

Чтобы легче было разобраться — немного про комбинаторику на VBA:

http://www.excelworld.ru/forum/3-36449-1

 

Евгений Смирнов

Пользователь

Сообщений: 539
Регистрация: 18.02.2021

#27

23.01.2022 04:54:53

MCH Спасибо за ссылку. Файл очень помог разобраться. Правда пришлось почитать про комбинаторику, перемещения, сочетания, размещения.(Восполнить пробел из-за пропущенных лекций). Можно считать, что обучение прошло успешно. Выкладываю домашнее задание для разнообразия решений. Правда по скорости это не лучшее решение. Оказывается в этих макросах сильно влияет на скорость тип переменных. К сожалению в моем коде переменные Zx нельзя объявить типом Long.

Код
Sub mainForEach() 'УДАР+УДАР=ДРАКА
Dim Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8, Z9, tmr!: tmr = Timer
a1 = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
For Each Z1 In a1
    a2 = Filter(a1, Z1, 0, 1)
    For Each Z2 In a2
        a3 = Filter(a2, Z2, 0, 1)
        For Each Z3 In a3
            a4 = Filter(a3, Z3, 0, 1)
            For Each Z4 In a4
                a5 = Filter(a4, Z4, 0, 1)
                For Each Z5 In a5
If (Z1 * 1000 + Z2 * 100 + Z3 * 10 + Z4) * 2 = Z2 * 10000 + Z4 * 1000 + Z3 * 100 + Z5 * 10 + Z3 Then
Debug.Print Z1 & Z2 & Z3 & Z4 & " + " & Z1 & Z2 & Z3 & Z4 & " = " & Z2 & Z4 & Z3 & Z5 & Z3
Debug.Print FormatNumber(Timer - tmr, 4)
Exit Sub
End If
                Next Z5
            Next Z4
        Next Z3
    Next Z2
Next Z1
'Debug.Print FormatNumber(Timer - tmr, 4)
End Sub

Лучший ответ Сообщение было отмечено Elizaabeth как решение

Решение

Цитата
Сообщение от Elizaabeth
Посмотреть сообщение

КОРОВА + ТРАВА + ДОЯРКА = МОЛОКО

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
var
  k, o, r, v, a, t, d, ya, m, l: integer;
  s: set of byte;
 
begin
  for k := 1 to 9 do
    if not (k in s) then
    begin
      Include(s, k);
      for o := 0 to 9 do
        if not (o in s) then
        begin
          Include(s, o);
          for r := 0 to 9 do
            if not (r in s) then
            begin
              Include(s, r);
              for v := 0 to 9 do
                if not (v in s) then
                begin
                  Include(s, v);
                  for a := 0 to 9 do
                    if not (a in s) then
                    begin
                      Include(s, a);
                      for t := 1 to 9 do
                        if not (t in s) then
                        begin
                          Include(s, t);
                          for d := 1 to 9 do
                            if not (d in s) then
                            begin
                              Include(s, d);
                              for ya := 0 to 9 do
                                if not (ya in s) then
                                begin
                                  Include(s, ya);
                                  for m := 1 to 9 do
                                    if not (m in s) then
                                    begin
                                      Include(s, m);
                                      for l := 0 to 9 do
                                        if not (l in s) then
                                        begin
                                          Include(s, l);
                                          if k * 100000 + o * 10000 + r * 1000 + o * 100 + v * 10 + a
                                          + t * 10000 + r * 1000 + a * 100 + v * 10 + a +
                                          d * 100000 + o * 10000 + ya * 1000 + r * 100 + k * 10 + a =
                                          m * 100000 + o * 10000 + l * 1000 + o * 100 + k * 10 + o then
                                            Writeln(k, o, r, o, v, a, ' + ', t, r, a, v, a, ' + ', d, o, ya, r, k, a, ' = ', m, o, l, o, k, o);
                                          Exclude(s, l);
                                        end;
                                      Exclude(s, m);
                                    end;
                                  Exclude(s, ya);
                                end;
                              Exclude(s, d);
                            end;
                          Exclude(s, t);
                        end;
                      Exclude(s, a);
                    end;
                  Exclude(s, v);
                end;
              Exclude(s, r);
            end;
          Exclude(s, o);
        end;
      Exclude(s, k);
    end;
  Readln
end.

Добавлено через 12 минут

Цитата
Сообщение от Elizaabeth
Посмотреть сообщение

АЛЁНКА + ИВАН + КОЗЛИК = СКАЗКА

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
var
  a, l, e, n, k, i, v, o, z, s: integer;
  m: set of byte;
 
begin
  for a := 1 to 9 do
    if not (a in m) then
    begin
      Include(m, a);
      for l := 0 to 9 do
        if not (l in m) then
        begin
          Include(m, l);
          for e := 0 to 9 do
            if not (e in m) then
            begin
              Include(m, e);
              for n := 0 to 9 do
                if not (n in m) then
                begin
                  Include(m, n);
                  for k := 1 to 9 do
                    if not (k in m) then
                    begin
                      Include(m, k);
                      for i := 1 to 9 do
                        if not (i in m) then
                        begin
                          Include(m, i);
                          for v := 0 to 9 do
                            if not (v in m) then
                            begin
                              Include(m, v);
                              for o := 0 to 9 do
                                if not (o in m) then
                                begin
                                  Include(m, o);
                                  for z := 0 to 9 do
                                    if not (z in m) then
                                    begin
                                      Include(m, z);
                                      for s := 1 to 9 do
                                        if not (s in m) then
                                        begin
                                          Include(m, s);
                                          if a * 100000 + l * 10000 + e * 1000 + n * 100 + k * 10 + a +
                                          i * 1000 + v * 100 + a * 10 + n +
                                          k * 100000 + o * 10000 + z * 1000 + l * 100 + i * 10 + k =
                                          s * 100000 + k * 10000 + a * 1000 + z * 100 + k * 10 + a then
                                            Writeln(a, l, e, n, k, a, ' + ', i, v, a, n, ' + ', k, o, z, l, i, k, ' = ', s, k, a, z, k, a);
                                          Exclude(m, s);
                                        end;
                                      Exclude(m, z);
                                    end;
                                  Exclude(m, o);
                                end;
                              Exclude(m, v);
                            end;
                          Exclude(m, i);
                        end;
                      Exclude(m, k);
                    end;
                  Exclude(m, n);
                end;
              Exclude(m, e);
            end;
          Exclude(m, l);
        end;
      Exclude(m, a);
    end;
  Readln
end.

Добавлено через 14 минут

Цитата
Сообщение от Elizaabeth
Посмотреть сообщение

ВЕТКА + ВЕТКА + СТВОЛ= ДЕРЕВО

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
var
  v, e, t, k, a, s, o, l, d, r: integer;
  m: set of byte;
 
begin
  for v := 1 to 9 do
    if not (v in m) then
    begin
      Include(m, v);
      for e := 0 to 9 do
        if not (e in m) then
        begin
          Include(m, e);
          for t := 0 to 9 do
            if not (t in m) then
            begin
              Include(m, t);
              for k := 0 to 9 do
                if not (k in m) then
                begin
                  Include(m, k);
                  for a := 0 to 9 do
                    if not (a in m) then
                    begin
                      Include(m, a);
                      for s := 1 to 9 do
                        if not (s in m) then
                        begin
                          Include(m, s);
                          for o := 0 to 9 do
                            if not (o in m) then
                            begin
                              Include(m, o);
                              for l := 0 to 9 do
                                if not (l in m) then
                                begin
                                  Include(m, l);
                                  for d := 1 to 9 do
                                    if not (d in m) then
                                    begin
                                      Include(m, d);
                                      for r := 1 to 9 do
                                        if not (r in m) then
                                        begin
                                          Include(m, r);
                                          if v * 20000 + e * 2000 + t * 200 + k * 20 + a * 2 +
                                          s * 10000 + t * 1000 + v * 100 + o * 10 + l =
                                          d * 100000 + e * 10000 + r * 1000 + e * 100 + v * 10 + o then
                                            Writeln(v, e, t, k, a, ' + ', v, e, t, k, a, ' + ', s, t, v, o, l, ' = ', d, e, r, e, v, o);
                                          Exclude(m, r);
                                        end;
                                      Exclude(m, d);
                                    end;
                                  Exclude(m, l);
                                end;
                              Exclude(m, o);
                            end;
                          Exclude(m, s);
                        end;
                      Exclude(m, a);
                    end;
                  Exclude(m, k);
                end;
              Exclude(m, t);
            end;
          Exclude(m, e);
        end;
      Exclude(m, v);
    end;
  Readln
end.

Добавлено через 7 минут

Цитата
Сообщение от Elizaabeth
Посмотреть сообщение

БАБКА + ДЕДКА + РЕПКА = СКАЗКА

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
var
  b, a, k, d, e, r, p, s, z: integer;
  m: set of byte;
 
begin
  for b := 1 to 9 do
    if not (b in m) then
    begin
      Include(m, b);
      for a := 0 to 9 do
        if not (a in m) then
        begin
          Include(m, a);
          for k := 0 to 9 do
            if not (k in m) then
            begin
              Include(m, k);
              for d := 1 to 9 do
                if not (d in m) then
                begin
                  Include(m, d);
                  for e := 0 to 9 do
                    if not (e in m) then
                    begin
                      Include(m, e);
                      for r := 1 to 9 do
                        if not (r in m) then
                        begin
                          Include(m, r);
                          for p := 0 to 9 do
                            if not (p in m) then
                            begin
                              Include(m, p);
                              for s := 1 to 9 do
                                if not (s in m) then
                                begin
                                  Include(m, s);
                                  for z := 0 to 9 do
                                    if not (z in m) then
                                    begin
                                      Include(m, z);
                                      if b * 10000 + a * 1000 + b * 100 + k * 10 + a +
                                      d * 10000 + e * 1000 + d * 100 + k * 10 + a +
                                      r * 10000 + e * 1000 + p * 100 + k * 10 + a =
                                      s * 100000 + k * 10000 + a * 1000 + z * 100 + k * 10 + a then
                                        Writeln(b, a, b, k, a, ' + ', d, e, d, k, a, ' + ', r, e, p, k, a, ' = ', s, k, a, z, k, a);
                                      Exclude(m, z);
                                    end;
                                  Exclude(m, s);
                                end;
                              Exclude(m, p);
                            end;
                          Exclude(m, r);
                        end;
                      Exclude(m, e);
                    end;
                  Exclude(m, d);
                end;
              Exclude(m, k);
            end;
          Exclude(m, a);
        end;
      Exclude(m, b);
    end;
  Readln
end.

Добавлено через 7 минут

Цитата
Сообщение от Elizaabeth
Посмотреть сообщение

ВОРОТА + ТРАВА = ФУТБОЛ

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
var
  v, o, r, t, a, f, u, b, l: integer;
  m: set of byte;
 
begin
  for v := 1 to 9 do
    if not (v in m) then
    begin
      Include(m, v);
      for o := 0 to 9 do
        if not (o in m) then
        begin
          Include(m, o);
          for r := 0 to 9 do
            if not (r in m) then
            begin
              Include(m, r);
              for t := 1 to 9 do
                if not (t in m) then
                begin
                  Include(m, t);
                  for a := 0 to 9 do
                    if not (a in m) then
                    begin
                      Include(m, a);
                      for f := 1 to 9 do
                        if not (f in m) then
                        begin
                          Include(m, f);
                          for u := 0 to 9 do
                            if not (u in m) then
                            begin
                              Include(m, u);
                              for b := 0 to 9 do
                                if not (b in m) then
                                begin
                                  Include(m, b);
                                  for l := 0 to 9 do
                                    if not (l in m) then
                                    begin
                                      Include(m, l);
                                      if v * 100000 + o * 10000 + r * 1000 + o * 100 + t * 10 + a +
                                      t * 10000 + r * 1000 + a * 100 + v * 10 + a =
                                      f * 100000 + u * 10000 + t * 1000 + b * 100 + o * 10 + l then
                                        Writeln(v, o, r, o, t, a, ' + ', t, r, a, v, a, ' = ', f, u, t, b, o, l);
                                      Exclude(m, l);
                                    end;
                                  Exclude(m, b);
                                end;
                              Exclude(m, u);
                            end;
                          Exclude(m, f);
                        end;
                      Exclude(m, a);
                    end;
                  Exclude(m, t);
                end;
              Exclude(m, r);
            end;
          Exclude(m, o);
        end;
      Exclude(m, v);
    end;
  Readln
end.



2



Знания

Вход
Регистрация

Опубликовано 2 года назад по предмету
Математика
от Polinabz122

СПОРТ+ПОРТ+ОРТ=РРРРР
ДЕДКА+БАБКА+РЕПКА=СКАЗКА
Заменить буквы одинаковыми цифрами.
СРОЧНО ПОМОГИТЕ

  1. Ответ

    Ответ дан
    halima01

    65567+5567+567=66666
    33342+22242+63542=642342

    1. Ответ

      Ответ дан
      halima01

      как поняла так и решила

    2. Ответ

      Ответ дан
      halima01

      да и какого класса задание??

    3. Ответ

      Ответ дан
      halima01

      Ааа

    4. Ответ

      Ответ дан
      Polinabz122

      Неправильно

    5. Ответ

      Ответ дан
      Polinabz122

      Уже не надо

Не тот ответ, который вам нужен?

Найди нужный

Самые новые вопросы

Никита081

Математика — 2 года назад

Сколько здесь прямоугольников

Alinashastova

История — 3 года назад

Какое управление было в древнейшем риме? как звали первого и последнего из царей рима?

diankayusupova3

Литература — 3 года назад

Уроки французского ответе на вопрос : расскажите о герое по следующему примерному плану: 1.почему мальчик оказался в райцентре ? 2.как он чувствовал себя на новом месте? 3.почему он не убежал в деревню? 4.какие отношения сложились у него с товарищами? 5.почему он ввязался в игру за деньги? 6.как характеризуют его отношения с учительницей ? ответе на эти вопросы пожалуйста ! сочините сочинение пожалуйста

tegysigalpa2012

Русский язык — 3 года назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса
1. укажите личное местоимение:
1) некто
2) вас
3) ни с кем
4) собой
2. укажите относительное местоимение:
1) кто-либо
2) некоторый
3) кто
4) нам
3. укажите вопросительное местоимение:
1) кем-нибудь
2) кем
3) себе
4) никакой
4. укажите определительное местоимение:
1) наш
2) который
3) некий
4) каждый
5. укажите возвратное местоимение:
1) свой
2) чей
3) сам
4) себя
6. найдите указательное местоимение:
1) твой
2) какой
3) тот
4) их
7. найдите притяжательное местоимение:
1) самый
2) моего
3) иной
4) ничей
8. укажите неопределённое местоимение:
1) весь
2) какой-нибудь
3) любой
4) этот
9. укажите вопросительное местоимение:
1) сколько
2) кое-что
3) она
4) нами
10. в каком варианте ответа выделенное слово является притяжательным местоимением?
1) увидел их
2) её нет дома
3) её тетрадь
4) их не спросили

pakhotnov228

Русский язык — 3 года назад

Переделай союзное предложение в предложение с бессоюзной связью.
1. океан с гулом ходил за стеной чёрными горами, и вьюга крепко свистала в отяжелевших снастях, а пароход весь дрожал.
2. множество темноватых тучек, с неясно обрисованными краями, расползались по бледно-голубому небу, а довольно крепкий ветер мчался сухой непрерывной струёй, не разгоняя зноя
3. поезд ушёл быстро, и его огни скоро исчезли, а через минуту уже не было слышно шума

ggg3288

Русский язык — 3 года назад

помогите прошу!перепиши предложения, расставляя недостающие знаки препинания. объясни, что соединяет союз и. если в предложении один союз и, то во втором выпадающем списке отметь «прочерк».пример:«я шёл пешком и,/поражённый прелестью природы/, часто останавливался».союз и соединяет однородные члены.ночь уже ложилась на горы (1) и туман сырой (2) и холодный начал бродить по ущельям.союз и соединяет:1) части сложного предложенияоднородные члены,2) однородные членычасти сложного предложения—.поэт — трубач зовущий войско в битву (1) и прежде всех идущий в битву сам (ю. янонис).союз и соединяет:1) части сложного предложенияоднородные члены,2) ​

Аккаунт удален

Физика — 3 года назад

Вокруг прямого проводника с током (смотри рисунок) существует магнитное поле. определи направление линий этого магнитного поля в точках a и b.обрати внимание, что точки a и b находятся с разных сторон от проводника (точка a — снизу, а точка b — сверху). рисунок ниже выбери и отметь правильный ответ среди предложенных.1. в точке a — «от нас», в точке b — «к нам» 2. в точке a — «к нам», в точке b — «от нас» 3. в обеих точках «от нас»4. в обеих точках «к нам»контрольная работа по физике.прошу,не наугад важно

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Что ты хочешь узнать на сайте Знания ком?

Задай вопрос

Все предметы

Математика

Литература

Алгебра

Русский язык

Геометрия

Английский язык

Химия

Физика

Биология

История

Обществознание

Окружающий мир

География

Українська мова

Информатика

Українська література

Қазақ тiлi

Экономика

Музыка

Право

Беларуская мова

Французский язык

Немецкий язык

МХК

ОБЖ

Психология

Оʻzbek tili

Кыргыз тили

Астрономия

Физкультура и спорт

Другие предметы

  • Сайт
  • Главная
  • Задать вопрос
  • Аккаунт
  • Вход
  • Регистрация

Войти

У меня нет аккаунта, я хочу

зарегистрироваться

Регистрация

Никнейм

Пароль

E-mail

  • Дед с длинной бородой сказка
  • Дед рассказывает сказки любовь воронкова
  • Дед рассказывает сказки воронкова читать
  • Дед мороз и его дети сказка
  • Девять рассказов джером дэвид сэлинджер книга