Код работает не правильно!

Задание: Задан целочисленный массив Х из 20 элементов. Переписать в массив Y наибольшую по длине возрастающую последовательность исходного массива. Язык программирования: С++

#include <clocale>
using namespace std;
int main() {
    setlocale(LC_CTYPE, "");
int X[20] = { 3, 2, 6, 4, 8, 5, 7, 9, 1, 10, 12, 11, 14, 13, 15, 18, 16, 19, 17, 20 };    
    int Y[20] = { 0 };
    int maxLength = 1;
    int currentLength = 1;
    Y[0] = X[0];

    for (int i = 1; i < 20; i++) {
        if (X[i] > X[i - 1]) {
            Y[currentLength] = X[i];
            currentLength++;
            if (currentLength > maxLength) {
                maxLength = currentLength;
            }
        }
        else {
            if (currentLength > 1) {
                currentLength = 1;
            }
            Y[currentLength - 1] = X[i];
        }
    }
    cout << "Изначальный массив:" << endl;
    for (int j = 0; j < 20; j++) {
        if ((j + 1) % 5 == 0) {
            cout << X[j] << endl;
        }
        else
            cout << X[j] << " ";
    }
    cout << "Наибольшая по длине возрастающая последовательность массива X:";
    for (int i = 0; i < maxLength; i++) {
        cout << Y[i] << " ";
    }
}

Не понимаю, почему код выдаёт неправильные значения? По возможности, лучше исправить мой код, чем писать новый, если у меня совсем всё плохо, то тогда я бы хотел увидеть правильный код для этого задания.


Ответы (1 шт):

Автор решения: MBo

Вы теряете информацию в Y при начале новой серии.

Попробуйте следующий вариант (с улучшениями от Harry)

    int maxLength = 1;
    int maxStart = 0;
    int currentLength = 1;
    int start = 0;

for (int i = 1; i < 20; i++)
    if (X[i] > X[i - 1])
    {
        if (++currentLength > maxLength)
        {
            maxLength = currentLength;
            maxStart = start;
        }
    }
    else
    {
        currentLength = 1;
        start = i;
    }

for (int i = 0; i < maxLength; i++) 
       Y[i] = X[maxStart + i];
→ Ссылка