Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Числовое кольцо. В кольце записаны N чисел, составляющих по часовой стрелке 3 числа: два слагаемых и сумму.
- Требуется написать программу, которая по строке чисел, считая ее кольцом, находит какое-нибудь решение в виде A+B=C.
- Все цифры числа должны входить в числа только один раз и в порядке следования в кольце. Цифр в кольце не более 1000.
- Формат входных данных: Входной файл содержит 1 строку, в которой без пробелов перечислены цифры кольца.
- Формат выходных данных: В выходной файл выводится тождество в виде <слагаемое1>+<слагаемое2>=<сумма> без пробелов внутри или слово «No», если решения не существует.
- */
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <list>
- #include <algorithm>
- using namespace std;
- int main()
- {
- setlocale(LC_ALL, "Russian");
- cout << "Старт программы" << endl;
- string input_str = ""; //Переменная исходной строки
- //Считываем файл и заносим в исходную строку input_str
- input_str = "01902021";
- int input_str_length = input_str.length();
- if (input_str_length >= 3 && input_str_length <= 1000) { //Проверка на дурака
- string Astr = ""; string Bstr = ""; string Cstr = "";
- bool check = false; //Для остановки цикла
- int cycle = 0;
- while (cycle < input_str_length+1 && !check) { //Двигаем кольцо
- cout << endl;
- cout << input_str << endl;
- cout << endl;
- for (int j = 0; j < input_str_length - 2 && !check; j++) {
- Astr = ""; Bstr = ""; Cstr = "";
- cout << endl;
- list<char> A(1, input_str[0]);
- list<char> B(1, input_str[j + 1]);
- list<char> C;
- //Заполнение первого списка
- for (int i = 1; i <= j; i++) {
- A.push_back(input_str[i]);
- }
- //Заполнение третьего списка оставшимеся цифрами
- for (int i = j + 2; i < input_str_length; i++) {
- C.push_back(input_str[i]);
- }
- for_each(A.cbegin(), A.cend(), [&](char n) { Astr += n; }); // используем [&] вместо [] т.к. нам необходимо обращаться к внешней переменной
- for_each(B.cbegin(), B.cend(), [&](char n) { Bstr += n; });
- for_each(C.cbegin(), C.cend(), [&](char n) { Cstr += n; });
- cout << Astr << "+" << Bstr << "=" << Cstr << endl;
- while (C.size() > 1 && !check) {
- Astr = ""; Bstr = ""; Cstr = "";
- B.push_back(C.front()); C.pop_front();
- for_each(A.cbegin(), A.cend(), [&](char n) { Astr += n; });
- for_each(B.cbegin(), B.cend(), [&](char n) { Bstr += n; });
- for_each(C.cbegin(), C.cend(), [&](char n) { Cstr += n; });
- cout << Astr << "+" << Bstr << "=" << Cstr << endl;
- //Проверка условия
- if (atoi(Astr.c_str()) + atoi(Bstr.c_str()) == atoi(Cstr.c_str()) && Astr.front() != '0' && Bstr.front() != '0' && Cstr.front() != '0') {
- check = true; //Останавливаем цикл
- cout << endl;
- cout << Astr << "+" << Bstr << "=" << Cstr << endl; //Выводим ответ
- cout << endl << "Обработка завершена" << endl; //Сообщаем в консоль, что работа закончена
- }
- }
- if (!check) {
- //Проверка условия
- if (atoi(Astr.c_str()) + atoi(Bstr.c_str()) == atoi(Cstr.c_str()) && Astr.front() != '0' && Bstr.front() != '0' && Cstr.front() != '0') {
- check = true; //Останавливаем цикл
- cout << endl;
- cout << Astr << "+" << Bstr << "=" << Cstr << endl; //Выводим ответ в файл
- cout << endl << "END WORK" << endl; //Обозначаем в консоли для пользователя, что работа завершилась
- }
- }
- }
- //Сдвигаем исходную строку по кольцу
- input_str += input_str[0];
- input_str.erase(0,1);
- cycle++;
- }
- cout << endl;
- if (!check) cout << "No" << endl; //Выводим в файл отрицательный ответ
- cout << endl;
- }
- else {
- cout << "Ошибка входных данных" << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment