Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int main() {
- int N; // Спрашиваем у юзера скока хочет он ввести элементов
- cin >> N;
- char a[N][101]; // создаем массив типа ЧАР кол-во строк = кол-ву элеметов, кол-во столбцов = макс.кол-во элементов в строке из условия
- for (int k = 0; k < N; k++) { // Обнуляем все строчки массива строк
- for (int i = 0; i < 101; i++) a[k][i] = 0;
- }
- for (int k = 0; k < N; k++) // Просим пользоваться заполнить строки
- cin >> a[k];
- int size[N] = { 0 }; // Массив размеров строк
- for (int k = 0; k < N; k++) { // Заполняем массив размеров
- int i = 0;
- while (a[k][i] != 0) i++; // Пока не встретим в каждой строке нулевой элемент i++, строка кончилась -> записали размер в массив size
- size[k] = i;
- }
- int max = -1, max_n = 0; // max - максимальный элемент, max_n - номер строки максимального элемента
- for (int k = 0; k < N; k++) { // Проходим по первому разряду каждого числа и находим максимальное - из которого начнем строить результат
- if (a[k][0] - 48 >= max) { // Прикол в том что может быть 2 или несколько чисел, которые начинаются с одной цифры и нам надо выбрать какое будем юзать на данном этапе
- if (a[k][0] - 48 == max) { // ТУТ У НАС ВЕТВЛЕНИЕ , 2 СИТУАЦИИ - ЕСЛИ ПОПАЛОСЬ УЖЕ ВТОРОЕ ЧИСЛО С МАКСИМАЛЬНОЙ ОДИНАКОВОЙ ЦИФРЫ И НЕТ! ЕСЛИ НЕТ - ИДЕМ В ELSE СРАЗУ
- int c_old = max, c_new = a[k][0] - 48; // КАРОЧЕ ИДЕЯ В ТОМ ЧТОБЫ ПОСЧИТАТЬ ОБЕ СИТУАЦИИ, ДАНЫ ДВА ЧИСЛА 2 И 20 КАКОЕ ВЫБРАТЬ? МЫ СЧИТАЕМ c_old и c_new 220 и 202 КАКОЕ БОЛЬШЕ ТАКОЕ И ВОЗЬМЕМ ПОТМОУ ЧТО ВЫГОДНЕЕ
- if (size[max_n] > 1) { // это кароче чтобы посчитать c_old мы смотрим, сколько чисел в прошлом числе, надеюсь понятно че такое прошлое число типо если прошлое число состоит из 1 цифры всего как например в случае 2 20, то нам больше ниче и не надо, а если 20 2 то надо еще как то нолик добавить чтобы 202 получилось воот
- for (int g = 1; g < size[max_n]; g++) { // Цикл выполнится столько раз, сколько кол-во чисел в прошлом числе -1 (почему -1 потому что мы уже начали построение нашего числа и при инициализации c_old запихали в него 1 число)
- c_old = c_old * 10 + a[max_n][g] - 48; // КОНСТРУИРУЕМ НАШЕ ЧИСЛО ДУМАЮ ПОНЯТНО
- }
- }
- 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 надеюсь понятно написал и заебись четка внатуре класс умеете могете
- c_old = c_old * 10 + a[k][g] - 48; // достраиваем c_old элементами второго числа
- }
- if (size[k] > 1) { // считаем new аналогично с old
- for (int g = 1; g < size[k]; g++) {
- c_new = c_new * 10 + a[k][g] - 48;
- }
- }
- for (int g = 0; g < size[max_n]; g++) {
- c_new = c_new * 10 + a[max_n][g] - 48;
- }
- if (c_new > c_old) {
- max_n = k;
- max = a[k][0] - 48;
- }
- }
- else { // ТО САМОЕ ELSE
- max_n = k;
- max = a[k][0] - 48;
- }
- }
- }
- long res = max; // В эту переменную мы будем строить общий результат и начнем мы ее строить так сказать ее каркас с самого большого первого числа
- for (int k = 1; k < size[max_n]; k++) // вот например size[max_n] это сколько цифр в максимальном числе типа
- res = res * 10 + a[max_n][k] - 48; // Строим дальше епта достраиваем мы же русские нахуй а не таджики ебаные СЛАВА РОДУ НЕТ УРОДУ МОЙ ОТЕЦ БЫЛ СКИНОМ
- a[max_n][0] = 0; // Обнуляй или проебешься
- for (int k = 1; k < N; k++) { // Тут мы делаем все то же самое что и первый раз только в цикле. Почему мы все сразу не делали в цикле ? - Потому что нам надо было так сказати заложить фундамент для нашего числа результата - с чего начать строить нужна было первая цифра
- max = -1; max_n = 0;
- for (int m = 0; m < N; m++) { // Ваще все то же самое только под общим циклом
- if (a[m][0] - 48 >= max) {
- if (a[m][0] - 48 == max) {
- int c_old = max, c_new = a[m][0] - 48;
- if (size[max_n] > 1) { // считаем old
- for (int g = 1; g < size[max_n]; g++) {
- c_old = c_old * 10 + a[max_n][g] - 48;
- }
- }
- for (int g = 0; g < size[m]; g++) {
- c_old = c_old * 10 + a[m][g] - 48;
- }
- if (size[m] > 1) { // считаем new
- for (int g = 1; g < size[m]; g++) {
- c_new = c_new * 10 + a[m][g] - 48;
- }
- }
- for (int g = 0; g < size[max_n]; g++) {
- c_new = c_new * 10 + a[max_n][g] - 48;
- }
- if (c_new > c_old) {
- max_n = m;
- max = a[m][0] - 48;
- }
- }
- else {
- max_n = m;
- max = a[m][0] - 48;
- }
- }
- }
- // cout << max << endl;
- for (int z = 0; z < size[max_n]; z++)
- res = res * 10 + a[max_n][z] - 48;
- a[max_n][0] = 0;
- }
- cout << res << endl; // Выводим результат
- }
Add Comment
Please, Sign In to add comment