semenrbt

laba stepanu + Poyasni za wmot

Jan 16th, 2021 (edited)
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.06 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. int main() {
  7.     int N; // Спрашиваем у юзера скока хочет он ввести элементов
  8.     cin >> N;
  9.     char a[N][101]; // создаем массив типа ЧАР кол-во строк = кол-ву элеметов, кол-во столбцов = макс.кол-во элементов в строке из условия
  10.     for (int k = 0; k < N; k++) { // Обнуляем все строчки массива строк
  11.         for (int i = 0; i < 101; i++) a[k][i] = 0;
  12.     }
  13.  
  14.     for (int k = 0; k < N; k++) // Просим пользоваться заполнить строки
  15.         cin >> a[k];
  16.  
  17.     int size[N] = { 0 }; // Массив размеров строк
  18.     for (int k = 0; k < N; k++) { // Заполняем массив размеров
  19.         int i = 0;
  20.         while (a[k][i] != 0) i++; // Пока не встретим в каждой строке нулевой элемент i++, строка кончилась -> записали размер в массив size
  21.         size[k] = i;
  22.     }
  23.  
  24.  
  25.     int max = -1, max_n = 0; // max - максимальный элемент, max_n - номер строки максимального элемента
  26.     for (int k = 0; k < N; k++) { // Проходим по первому разряду каждого числа и находим максимальное - из которого начнем строить результат
  27.         if (a[k][0] - 48 >= max) { // Прикол в том что может быть 2 или несколько чисел, которые начинаются с одной цифры и нам надо выбрать какое будем юзать на данном этапе
  28.                 if (a[k][0] - 48 == max) { // ТУТ У НАС ВЕТВЛЕНИЕ , 2 СИТУАЦИИ - ЕСЛИ ПОПАЛОСЬ УЖЕ ВТОРОЕ ЧИСЛО С МАКСИМАЛЬНОЙ ОДИНАКОВОЙ ЦИФРЫ И НЕТ! ЕСЛИ НЕТ - ИДЕМ В ELSE СРАЗУ
  29.                     int c_old = max, c_new = a[k][0] - 48; // КАРОЧЕ ИДЕЯ В ТОМ  ЧТОБЫ ПОСЧИТАТЬ ОБЕ СИТУАЦИИ, ДАНЫ ДВА ЧИСЛА 2 И 20 КАКОЕ ВЫБРАТЬ? МЫ СЧИТАЕМ c_old и c_new 220 и 202 КАКОЕ БОЛЬШЕ ТАКОЕ И ВОЗЬМЕМ ПОТМОУ ЧТО ВЫГОДНЕЕ
  30.                     if (size[max_n] > 1) { // это кароче чтобы посчитать c_old мы смотрим, сколько чисел в прошлом числе, надеюсь понятно че такое прошлое число типо если прошлое число состоит из 1 цифры всего как например в случае 2 20, то нам больше ниче и не надо, а если 20 2 то надо еще как то нолик добавить чтобы 202 получилось воот
  31.                         for (int g = 1; g < size[max_n]; g++) { // Цикл выполнится столько раз, сколько кол-во чисел в прошлом числе -1 (почему -1 потому что мы уже начали построение нашего числа и при инициализации c_old запихали в него 1 число)
  32.                             c_old = c_old * 10 + a[max_n][g] - 48; // КОНСТРУИРУЕМ НАШЕ ЧИСЛО ДУМАЮ ПОНЯТНО
  33.                         }
  34.                     }
  35.                     for (int g = 0; g < size[k]; g++) { // теперь далее мы для построения c_old ваще что такое c_old попробую ща тут обьяснить: у нас получается последовательность идет из двух чисел которые начинаются с одной цифры к примеру да 2 20, такой вопрос возникает когда мы дошли до числа 20, потому что ранее встречалось 2, они начинаются с одной цифры и мы в рот не ебем какое взять на данный момент в случае 2 20 c_old будет 220 а c_new 202, в случае 20 2 последовательности c_old 202 а с_new = 220 надеюсь понятно написал и заебись четка внатуре класс умеете могете
  36.                         c_old = c_old * 10 + a[k][g] - 48; // достраиваем c_old элементами второго числа
  37.                     }
  38.  
  39.                     if (size[k] > 1) { // считаем new аналогично с old
  40.                         for (int g = 1; g < size[k]; g++) {
  41.                             c_new = c_new * 10 + a[k][g] - 48;
  42.                         }
  43.                     }
  44.                     for (int g = 0; g < size[max_n]; g++) {
  45.                         c_new = c_new * 10 + a[max_n][g] - 48;
  46.                     }
  47.  
  48.                     if (c_new > c_old) {
  49.                         max_n = k;
  50.                         max = a[k][0] - 48;
  51.                     }
  52.  
  53.                 }
  54.                 else { // ТО САМОЕ ELSE
  55.                     max_n = k;
  56.                     max = a[k][0] - 48;
  57.                 }
  58.         }
  59.     }
  60.     long res = max; // В эту переменную мы будем строить общий результат и начнем мы ее строить так сказать ее каркас с самого большого первого числа
  61.  
  62.     for (int k = 1; k < size[max_n]; k++)  // вот например size[max_n] это сколько цифр в максимальном числе типа
  63.         res = res * 10 + a[max_n][k] - 48; // Строим дальше епта достраиваем мы же русские нахуй а не таджики ебаные СЛАВА РОДУ НЕТ УРОДУ МОЙ ОТЕЦ БЫЛ СКИНОМ
  64.     a[max_n][0] = 0; // Обнуляй или проебешься
  65.  
  66.     for (int k = 1; k < N; k++) { // Тут мы делаем все то же самое что и первый раз только в цикле. Почему мы все сразу не делали в цикле ? - Потому что нам надо было так сказати заложить фундамент для нашего числа результата - с чего начать строить нужна было первая цифра
  67.         max = -1; max_n = 0;
  68.         for (int m = 0; m < N; m++) { // Ваще все то же самое только под общим циклом
  69.             if (a[m][0] - 48 >= max) {
  70.                 if (a[m][0] - 48 == max) {
  71.                     int c_old = max, c_new = a[m][0] - 48;
  72.                     if (size[max_n] > 1) { // считаем old
  73.                         for (int g = 1; g < size[max_n]; g++) {
  74.                             c_old = c_old * 10 + a[max_n][g] - 48;
  75.                         }
  76.                     }
  77.                     for (int g = 0; g < size[m]; g++) {
  78.                         c_old = c_old * 10 + a[m][g] - 48;
  79.                     }
  80.  
  81.                     if (size[m] > 1) { // считаем new
  82.                         for (int g = 1; g < size[m]; g++) {
  83.                             c_new = c_new * 10 + a[m][g] - 48;
  84.                         }
  85.                     }
  86.                     for (int g = 0; g < size[max_n]; g++) {
  87.                         c_new = c_new * 10 + a[max_n][g] - 48;
  88.                     }
  89.  
  90.                     if (c_new > c_old) {
  91.                         max_n = m;
  92.                         max = a[m][0] - 48;
  93.                     }
  94.  
  95.                 }
  96.                 else {
  97.                     max_n = m;
  98.                     max = a[m][0] - 48;
  99.                 }
  100.  
  101.             }
  102.         }
  103.         //  cout << max << endl;
  104.         for (int z = 0; z < size[max_n]; z++)
  105.             res = res * 10 + a[max_n][z] - 48;
  106.         a[max_n][0] = 0;
  107.  
  108.     }
  109.     cout << res << endl; // Выводим результат
  110. }
  111.  
Add Comment
Please, Sign In to add comment