ChameL1oN

Petr Nik

Apr 11th, 2022 (edited)
1,077
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.38 KB | None | 0 0
  1. /*
  2. Числовое кольцо. В кольце записаны N чисел, составляющих по часовой стрелке 3 числа: два слагаемых и сумму.
  3. Требуется написать программу, которая по строке чисел, считая ее кольцом, находит какое-нибудь решение в виде A+B=C.
  4. Все цифры числа должны входить в числа только один раз и в порядке следования в кольце. Цифр в кольце не более 1000.
  5. Формат входных данных: Входной файл содержит 1 строку, в которой без пробелов перечислены цифры кольца.
  6. Формат выходных данных: В выходной файл выводится тождество в виде <слагаемое1>+<слагаемое2>=<сумма> без пробелов внутри или слово «No», если решения не существует.
  7. */
  8.  
  9. #include <iostream>
  10. #include <fstream>
  11. #include <string>
  12. #include <list>
  13. #include <algorithm>
  14.  
  15. using namespace std;
  16.  
  17. int main()
  18. {
  19.     setlocale(LC_ALL, "Russian");
  20.     cout << "Старт программы" << endl;
  21.     string input_str = ""; //Переменная исходной строки
  22.  
  23.     //Считываем файл и заносим в исходную строку input_str
  24.     input_str = "01902021";
  25.  
  26.     int input_str_length = input_str.length();
  27.  
  28.     if (input_str_length >= 3 && input_str_length <= 1000) { //Проверка на дурака
  29.         string Astr = ""; string Bstr = ""; string Cstr = "";
  30.         bool check = false; //Для остановки цикла
  31.  
  32.         int cycle = 0;
  33.  
  34.         while (cycle < input_str_length+1 && !check) { //Двигаем кольцо
  35.             cout << endl;
  36.             cout << input_str << endl;
  37.             cout << endl;
  38.  
  39.             for (int j = 0; j < input_str_length - 2 && !check; j++) {
  40.                 Astr = ""; Bstr = ""; Cstr = "";
  41.                 cout << endl;
  42.                
  43.                 list<char> A(1, input_str[0]);
  44.                 list<char> B(1, input_str[j + 1]);
  45.                 list<char> C;
  46.  
  47.                 //Заполнение первого списка
  48.                 for (int i = 1; i <= j; i++) {
  49.                     A.push_back(input_str[i]);
  50.                 }
  51.  
  52.                 //Заполнение третьего списка оставшимеся цифрами
  53.                 for (int i = j + 2; i < input_str_length; i++) {
  54.                     C.push_back(input_str[i]);
  55.                 }
  56.  
  57.  
  58.                 for_each(A.cbegin(), A.cend(), [&](char n) { Astr += n; }); // используем [&] вместо [] т.к. нам необходимо обращаться к внешней переменной
  59.                 for_each(B.cbegin(), B.cend(), [&](char n) { Bstr += n; });
  60.                 for_each(C.cbegin(), C.cend(), [&](char n) { Cstr += n; });
  61.  
  62.                 cout << Astr << "+" << Bstr << "=" << Cstr << endl;
  63.  
  64.                 while (C.size() > 1 && !check) {
  65.                     Astr = ""; Bstr = ""; Cstr = "";
  66.                     B.push_back(C.front()); C.pop_front();
  67.  
  68.                     for_each(A.cbegin(), A.cend(), [&](char n) { Astr += n; });
  69.                     for_each(B.cbegin(), B.cend(), [&](char n) { Bstr += n; });
  70.                     for_each(C.cbegin(), C.cend(), [&](char n) { Cstr += n; });
  71.                     cout << Astr << "+" << Bstr << "=" << Cstr << endl;
  72.                     //Проверка условия
  73.                     if (atoi(Astr.c_str()) + atoi(Bstr.c_str()) == atoi(Cstr.c_str()) && Astr.front() != '0' && Bstr.front() != '0' && Cstr.front() != '0') {
  74.                         check = true; //Останавливаем цикл
  75.                         cout << endl;
  76.                         cout << Astr << "+" << Bstr << "=" << Cstr << endl; //Выводим ответ
  77.                         cout << endl << "Обработка завершена" << endl; //Сообщаем в консоль, что работа закончена
  78.                     }
  79.                 }
  80.                 if (!check) {
  81.                     //Проверка условия
  82.                     if (atoi(Astr.c_str()) + atoi(Bstr.c_str()) == atoi(Cstr.c_str()) && Astr.front() != '0' && Bstr.front() != '0' && Cstr.front() != '0') {
  83.                         check = true; //Останавливаем цикл
  84.                         cout << endl;
  85.                         cout << Astr << "+" << Bstr << "=" << Cstr << endl; //Выводим ответ в файл
  86.                         cout << endl << "END WORK" << endl; //Обозначаем в консоли для пользователя, что работа завершилась
  87.                     }
  88.                 }
  89.             }
  90.             //Сдвигаем исходную строку по кольцу
  91.             input_str += input_str[0];
  92.             input_str.erase(0,1);
  93.             cycle++;
  94.  
  95.         }  
  96.         cout << endl;
  97.         if (!check) cout << "No" << endl; //Выводим в файл отрицательный ответ
  98.         cout << endl;
  99.  
  100.     }
  101.     else {
  102.         cout << "Ошибка входных данных" << endl;
  103.     }
  104.  
  105.    
  106. }
  107.  
Advertisement
Add Comment
Please, Sign In to add comment