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

Ребус Криптарифм

22.02.2016, 09:18. Показов 6076. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо найти все решения математического ребуса. Условия: с помощью букв зашифрованы числа, одинаковым буквам соответствуют одинаковые цифры, разным буквам разные цифры
Помогите, кто знает, пожалуйста, прочел кучу тем про данный ребус, суть решения понял, но не могу воспроизвести на языке программирования

Сумма: Z G Z C B
........+ U Z C H
..........------------
..........Z U B M M

P.s. точки для сохранения столбика сложения

Добавлено через 11 часов 22 минуты
Помогите, ребятааа
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2016, 09:18
Ответы с готовыми решениями:

Ребус
Вот задали нарисовать ребус в языке "C", связанный с программированием. Но у меня ничего не...

Ребус
В ребусе некоторые цифры зашифрованы буквами. Одинаковым буквам соответствуют одинаковые цифры,...

ребус
# include <iostream> # include <stdio.h> # include <conio.h> # include <math.h> using namespace...

Разгадать ребус
Преподаватель задал задачу по теме циклов. Помогите решить. удар + удар ---------- драка ...

22
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
22.02.2016, 10:05 2
нужен полный перебор, но если делать проверку на уникальность, то решение не существует.
так что либо где-то опечатка, либо условие плохое, в интернете его не нашел.

C++
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
#include <iostream>
#include <vector>
 
/*
*     Z G Z C B
*   +   U Z C H
*    ----------
*     Z U B M M
*/
 
inline int ZGZCB(int B, int C, int G, int Z)
{
    return Z*1e4 + G*1e3 + Z*1e2 + C*1e1 + B;
}
 
inline int UZCH(int C, int H, int U, int Z)
{
    return U*1e3 + Z*1e2 + C*1e1 + H;
}
 
inline int ZUBMM(int B, int M, int U, int Z)
{
    return Z*1e4 + U*1e3 + B*1e2 + M*1e1 + M;
}
 
bool hasDuplicate(const std::vector<int>& v)
{
    for (size_t i = 0; i < v.size(); ++i)
        for (size_t j = i+1; j < v.size(); ++j)
            if (v[i] == v[j])
                return true;
    return false;
}
 
int main()
{
    for(int B = 0; B < 10; ++B)
        for(int C = 0; C < 10; ++C)
            for(int G = 0; G < 10; ++G)
                for(int H = 0; H < 10; ++H)
                    for(int M = 0; M < 10; ++M)
                        for(int U = 0; U < 10; ++U)
                            for(int Z = 0; Z < 10; ++Z)
                            {
                                //  проверка на уникальность
                                std::vector<int> v{B, C, G, H, M, U, Z};
                                if(hasDuplicate(v))
                                    break;
 
                                if(ZGZCB(B, C, G, Z) + UZCH(C, H, U, Z) == ZUBMM(B, M, U, Z))
                                    std::cout << Z << G << Z << C << B << " + " <<
                                        U << Z << C << H << " = " << Z << U << B << M << M << std::endl;
                            }
    return 0;
}
1
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 88
22.02.2016, 10:41  [ТС] 3
Спасибо за код

Выводит 4 ошибки(из них 3 предупреждения)

Добавлено через 54 секунды
В проверке на уникальность ошибки как раз таки

Добавлено через 6 минут
А если мы не будем делать уникальную проверку?
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
22.02.2016, 10:44 4
Mdmaa, этот код работает, но он не выведет ничего, как я уже и сказал. эта задача не имеет решения.

а ты скорее всего используешь компилятор без поддержки c++11

Добавлено через 41 секунду
это верное условие?
C++
1
2
3
4
5
6
/*
*     Z G Z C B
*   +   U Z C H
*    ----------
*     Z U B M M
*/
2
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 88
22.02.2016, 10:49  [ТС] 5
Да, условие верное
Задача решаема, как мне сказано было
Про компилятор ты прав)
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
22.02.2016, 10:51 6
Mdmaa,
Цитата Сообщение от Mdmaa Посмотреть сообщение
Сумма: Z G Z C B
........+ U Z C H
..........------------
..........Z U B M M
в твоем условии выравнивание какое-то стремное, может я не так понял его?
Цитата Сообщение от Mdmaa Посмотреть сообщение
А если мы не будем делать уникальную проверку?
тогда не будет выполнено условие:
Цитата Сообщение от Mdmaa Посмотреть сообщение
разным буквам разные цифры
1
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 88
22.02.2016, 10:59  [ТС] 7
Перепишу полностью условие варианта:
С помощью букв зашифрованы числа, одинаковым буквам соответствуют одинаковые цифры, разным буквам соответствуют разные цифры

Вроде все также, нигде не ошибся
Условие корректное
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
22.02.2016, 11:00 8
Я уже решал здесь раньше такую задачку.
Подставляйте свои данные и программа вам выдаст ответ.
1
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 88
22.02.2016, 11:03  [ТС] 9
Написанный таким языком код у меня не примут)
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
22.02.2016, 11:08 10
10132 + 5134 = 15266
значит таки я напортачил где-то
1
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 88
22.02.2016, 11:16  [ТС] 11
Возможно
Буду очень благодарен, если поможешь мне с кодом
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
22.02.2016, 11:35 12
Mdmaa, вместо break нужно continue поставить конечно же..
если старый компилятор, то замени строчку.
C++
1
std::vector<int> v{B, C, G, H, M, U, Z};
на
C++
1
2
3
4
5
6
7
8
std::vector<int> v(7);
v[0] = B;
v[1] = C;
v[2] = G;
v[3] = H;
v[4] = M;
v[5] = U;
v[6] = Z;
Добавлено через 11 минут
Mr.X, твоя реализация останавливается на первом совпадении или выдает все возможные варианты?
2
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 88
22.02.2016, 11:40  [ТС] 13
Считаем, но в конце
Управляемый и машинный код завершилась с кодом 0
А кол-во можно вывести таких чисел?
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
22.02.2016, 11:44 14
Цитата Сообщение от Babysitter Посмотреть сообщение
Mr.X, твоя реализация останавливается на первом совпадении или выдает все возможные варианты?
А вы программу не читали что ли? На первом. Да вроде бы по условию не требуется все варианты искать.
0
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 88
22.02.2016, 11:45  [ТС] 15
Необходимо найти все решения математического ребуса
По условию же)
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
22.02.2016, 11:52 16
Цитата Сообщение от Mdmaa Посмотреть сообщение
Необходимо найти все решения математического ребуса
По условию же)
Пардон, не обратил внимания.
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
22.02.2016, 11:58 17
Лучший ответ Сообщение было отмечено Mdmaa как решение

Решение

Mdmaa, а с каким кодом, по-твоему, должна завершаться программа?
вообще неплохо бы почитать код, а не спрашивать такие простые вещи типа счетчика.
это же не код мистера икса, который без знания стл вообще не понять. мой - тупой и прямолинейный.

C++
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
    unsigned count = 0;
    for(int B = 0; B < 10; ++B)
        for(int C = 0; C < 10; ++C)
            for(int G = 0; G < 10; ++G)
                for(int H = 0; H < 10; ++H)
                    for(int M = 0; M < 10; ++M)
                        for(int U = 0; U < 10; ++U)
                            for(int Z = 0; Z < 10; ++Z)
                            {
                                //  проверка на уникальность
                                std::vector<int> v(7);
                                v[0] = B;
                                v[1] = C;
                                v[2] = G;
                                v[3] = H;
                                v[4] = M;
                                v[5] = U;
                                v[6] = Z;
 
                                if(hasDuplicate(v))
                                    continue;
 
                                if(ZGZCB(B, C, G, Z) + UZCH(C, H, U, Z) == ZUBMM(B, M, U, Z))
                                {
                                    std::cout << Z << G << Z << C << B << " + " <<
                                        U << Z << C << H << " = " << Z << U << B << M << M << std::endl;
                                    ++count;
                                }
                            }
 
    std::cout << "There are " << count << " different combinations." << std::endl;
0
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 88
22.02.2016, 12:01  [ТС] 18
Увидел, прости
Да, там код тяжелый для понимания
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
22.02.2016, 12:47 19
Вот эта программа находит все решения:
C++
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <algorithm>
#include <iostream>
#include <iterator>
#include <set>
#include <sstream>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                     T_str;
typedef std::set        < T_str     >   T_solutions;
typedef std::set        < char      >   T_symb_set;
///////////////////////////////////////////////////////////////////////////////
int     get_num
    (
        T_symb_set  const   &   letters,
        T_str       const   &   digits,
        T_str       const   &   word
    )
{
    T_str   dig_word;
 
    std::transform
        (
            word.begin          (),
            word.end            (),
            std::back_inserter  ( dig_word ),
 
            [=]                 ( char  letter )
            {
                auto    it  =   std::find
                                    (
                                        letters.begin   (),
                                        letters.end     (),
                                        letter
                                    );
 
                return  digits  [
                                    std::distance
                                        (
                                            letters.begin   (),
                                            it
                                        )
                                ];
            }
        );
 
    return  stoi( dig_word );
}
///////////////////////////////////////////////////////////////////////////////
void    print_all_solutions_of_rebus
    (
        T_str   const   &   L_str,
        T_str   const   &   R_str,
        T_str   const   &   sum_str
    )
{
    T_symb_set      letters;
    T_solutions     solutions;
 
    letters.insert
        (
            L_str.begin     (),
            L_str.end       ()
        );
 
    letters.insert
        (
            R_str.begin     (),
            R_str.end       ()
        );
 
    letters.insert
        (
            sum_str.begin   (),
            sum_str.end     ()
        );
 
    T_str   digits      ("0123456789");
    int     num_L       {};
    int     num_R       {};
    int     num_sum     {};
 
    do
    {
        num_L       =   get_num     (
                                        letters,
                                        digits,
                                        L_str
                                    );
 
        num_R       =   get_num     (
                                        letters,
                                        digits,
                                        R_str
                                    );
 
        num_sum     =   get_num     (
                                        letters,
                                        digits,
                                        sum_str
                                    );
 
        if  (
                        num_L
                    +   num_R
 
                ==      num_sum
            )
        {
            std::ostringstream  sout;
 
            sout    <<  num_L
                    <<  " + "
                    <<  num_R
                    <<  " = "
                    <<  num_sum;
 
            if  (
                    solutions.insert    (
                                            sout.str()
                                        )
                                        .second
                )
            {
                std::cout   <<  "found "
                            <<  solutions.size()
                            <<  " solutions"
                            <<  std::endl;
            }//if
        }//if
    }
    while   (
                 std::next_permutation
                     (
                         digits.begin    (),
                         digits.end      ()
                     )
            );
 
    std::copy
        (
            solutions.begin                 (),
            solutions.end                   (),
            std::ostream_iterator< T_str >  ( std::cout,    "\n" )
        );
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    print_all_solutions_of_rebus
        (
            "ZGZCB",
            "UZCH",
            "ZUBMM"
        );
 
    std::cout   <<  "end"
                <<  std::endl;
}
1
151 / 110 / 27
Регистрация: 17.10.2010
Сообщений: 1,201
22.02.2016, 13:30 20
Mr.X компилятор выдает ошибки. В чем проблема???? Заранее огромное спасибо.
Миниатюры
Ребус Криптарифм  
0
22.02.2016, 13:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2016, 13:30
Помогаю со студенческими работами здесь

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

Ребус друг гурд
Ребята помогите пожалуйста переделать на пост и пред условие # include &lt;iostream.h&gt; # include...

Количество возможных вариантов и ребус
Прошу помощи 1)Перед фермером стоит задача: купить на 100 рублей 100 голов скота. Стоимость быка...

Решить ребус: VOLVO - FIAT = MOTOR
3. Решить ребус: VOLVO - FIAT = MOTOR

Ребус: "Люба + Любит = Арбузы". В чем ошибка?
include&lt;iostream&gt; using namespace std; int mein() { long int luba,lubit,arbuzi; int...

Необходимо разгадать ребус
Человек находит код: 67090631364610450283655913416658678 а также несколько пометок: &quot;M-1-N&quot;,...


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

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

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