Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91

Задача "Три Буквы"

12.10.2013, 09:56. Показов 1923. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На доске в одну строку написано решение примера на сложение двух целых чисел. Cлева от знака равенства «=» записаны два целых числа, разделенных символом «+», справа записано целое число являющееся их суммой.
В записи равенства некоторые цифры от 1 до 9 заменили одной из трех букв — «A», «B» или «C». Каждая буква заменяет одинаковые цифры. Разные буквы соответствуют разным цифрам. Буквами могли заменить не все соответствующие им цифры.
Напишите программу, проводящую обратную замену букв на цифры, получающую верное равенство.
Входные данные:
Три строки, соответствующие первому и второму слагаемым и их сумме, содержащие цифры и символы «A», «B», «C». Длина каждой строки от 1 до 5 символов.
Гарантируется, что входные данные являются корректными.
Выходные данные:
В первой строке выводятся разделенные пробелами значения цифр, соответствующих символам «A», «B», «C» соответственно.
Во второй строке выводится строка, соответствующая восстановленной записи примера.
Если возможно несколько вариантов решения задачи, то выводится любой из них.
Верный ответ может отличаться от эталона.
Входные данные
A54C
C2A
ABB4
Выходные данные (вариант)
3
6
1
3541+123=3664
Помогите написать код! Сам алгоритм я знаю, реализацию не могу сделать
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2013, 09:56
Ответы с готовыми решениями:

Задача со строками (вывести слово, которое содержит ровно три буквы "и")
Здравствуйте, помогите решить задачу. Пользователь вводит предложение с пробелами, запятыми и тп. Нужно вывести слово, которое...

Дано слово. Переставить первые три и последние три буквы
Привет всем. Помогите пожалуйста кто может решить две задачи по C++. Сам пробовал решить_но безуспешно. 1.Дано слово. Переставить...

Задача: заменить в строке все буквы 'а' на буквы 'б'
#include <iostream> using namespace std; int main() { string s; cout << "Введите строку: "; getline ( cin, s ); for (...

4
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
12.10.2013, 11:57
Toshik_, Ну это задачка на перебор. Ты должен перебрать все возможные числа для букв АBC, от допустим у тебя есть А = 3, B=7, C= 9. У тебя есть выражение 375+9=384 - его нужно найти, у тебя есть реальное выражение AB5+C=A84; Как это можно сделать определить АBC? Да все очень просто простым перебором.
просто в циклах перебирай все возможные комбинации и подставляй в выражение, когда выражение будет истинна то тогда ты нашол нужные значения для АB и C.

В принципе простая задачка.
1
18 / 18 / 13
Регистрация: 14.09.2013
Сообщений: 37
12.10.2013, 13:59
Цитата Сообщение от Toshik_ Посмотреть сообщение
Помогите написать код! Сам алгоритм я знаю, реализацию не могу сделать
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
#include <iostream>
#include <vector>
#include <sstream>
 
using namespace std;
 
 
//////////////////////////////////////FUNCTIONS////////////////////////////////////////
int StringToNumber ( const string &Text );
bool Convert_Expr(string mem1,string mem2, string sum, char a, char b, char c);
int Convert(string &str, char a, char b, char c);// Convert a one member of the expression
void Find_Solution(string mem1,string mem2, string sum);
 
 
int StringToNumber ( const string &Text )//Text not by const reference so that the function can be used with a 
{                               //character array as argument
    stringstream ss(Text);
    int result;
    return ss >> result ? result : 0;
}
 
bool Convert_Expr(string mem1,string mem2, string sum, char a, char b, char c)
{
    int m1=Convert(mem1,a,b,c);
    int m2=Convert(mem2,a,b,c);
    int s=Convert(sum,a,b,c);
    return (m1+m2)==s;
}
 
int Convert(string &str, char a, char b, char c)
{
    for(int i=0;i<str.size();++i)
    {
        switch(str[i])
        {
        case 'A': str[i]=a; break;
        case 'B': str[i]=b; break;
        case 'C': str[i]=c; break;
        }
    }
    return StringToNumber(str);
}
 
 
void Find_Solution(string mem1,string mem2, string sum)
{
    for(int i=0;i<10;++i)
    {
        for(int j=0;j<10;++j)
        {
            if(i!=j)
            {
                for(int k=0;k<10;++k)
                {
                    if(k!=i && k!=j)
                    {
                        if(Convert_Expr(mem1,mem2,sum,'0'+i,'0'+j,'0'+k))
                        {                           
                            cout<<i<<endl<<j<<endl<<k<<endl;
                            cout<<Convert(mem1,'0'+i,'0'+j,'0'+k)<<" + "<<Convert(mem2,'0'+i,'0'+j,'0'+k)<<" = "<<Convert(sum,'0'+i,'0'+j,'0'+k)<<endl;
                            return;
                        }
                    }
                }
            }
        }
    }
}
 
int main()
{
    string mem1,mem2,sum;
    
    cout<<"Please enter a first summand"<<endl;
    cin>>mem1;
 
    cout<<"Please enter a second summand"<<endl;
    cin>>mem2;
 
    cout<<"Please enter a sum"<<endl;
    cin>>sum;
    cout<<endl<<endl;
    Find_Solution(mem1,mem2,sum);
    
    system("PAUSE");
}
1
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
12.10.2013, 16:24  [ТС]
Цитата Сообщение от ninja2 Посмотреть сообщение
Toshik_, Ну это задачка на перебор. Ты должен перебрать все возможные числа для букв АBC, от допустим у тебя есть А = 3, B=7, C= 9. У тебя есть выражение 375+9=384 - его нужно найти, у тебя есть реальное выражение AB5+C=A84; Как это можно сделать определить АBC? Да все очень просто простым перебором.
просто в циклах перебирай все возможные комбинации и подставляй в выражение, когда выражение будет истинна то тогда ты нашол нужные значения для АB и C.

В принципе простая задачка.
Я бы и сделал методом перебора, но я не могу сделать так чтобы пользователь вводил данные, затем он находил где цифры а где буквы и перебирал....
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
12.10.2013, 17:33
Цитата Сообщение от Toshik_ Посмотреть сообщение
Я бы и сделал методом перебора, но я не могу сделать так чтобы пользователь вводил данные, затем он находил где цифры а где буквы и перебирал....
Можно как то так сделать:
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
#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>
#include <regex>;
using namespace::std;
 
int main()
{
    string s1="AB5+C=A84";
    cout <<"vvedite stroky (AB5+C=A84) ... ";
    getline(cin,s1);
 
    int A(10);
    int B(10);
    int C(10);
    string s;
    int flag(0);
    
    for(A=0;A<10&&flag==0;A++)
    {
        for(B=0;B<10&&flag==0;B++)
        {
            if(B==A)continue;
            for(C=0;C<10&&flag==0;C++)
            {
                if(C==A||C==B)continue;
                //Делаем подстановку цифр вместо букв
                s=s1;
                string sn; sn=char(A+'0');
                s=regex_replace(s,regex("A"),sn);
                sn=char(B+'0');
                s=regex_replace(s,regex("B"),sn);
                sn=char(C+'0');
                s=regex_replace(s,regex("C"),sn);
                
                //считаем выражение
                smatch sm;
                if(regex_search(s,sm,regex("^(\\d+).(\\d+)=(\\d+)$")))
                {
                    int one, two, three;
                    stringstream ss;
                    ss <<sm[1].str(); ss >>one; ss.clear();
                    ss <<sm[2].str(); ss >>two; ss.clear();
                    ss <<sm[3].str(); ss >>three; ss.clear();
                
                    if(one+two==three) flag=1;
                }
            }
        }
    }
    
    if(flag==1)
    {
        cout <<"s= "<<s<<endl;
        cout <<"A= "<<A<<" B= "<<B<<" C= "<<C<<endl;
    }
    else
        cout <<"not fined"<<endl;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2013, 17:33
Помогаю со студенческими работами здесь

Переставить первые три и последние три буквы, сохранив порядок их следования
Дано слово.Переставить первые три и последние три буквы,сохранив порядок их следования.Задачу решить двумя способами :а)без использования...

Дано слово. Переставить первые три и последние три буквы
Дано слово. Переставить первые три и последние три буквы, сохраняя порядок из следования.Без использования оператора цикла

Переставить первые три и последние три буквы слова, сохранив порядок их следования
2. Дано слово. Переставить первые три и последние три буквы, сохранив порядок их следования. Задачу решить без с использования оператора...

Дано слово Переставить первый три и последние три буквы сохранив порядок их следования
Дано слово Переставить первый три и последние три буквы сохранив порядок их следования Задачу решить двумя способами 1)Без...

Дано слово. Переставить первые три и последние три буквы, сохранив порядок их следования
Дано слово. Переставить первые три и последние три буквы, сохранив порядок их следования. Задачу решить двумя способами: а) без...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru