Код работает не правильно!
Задание: Задан целочисленный массив Х из 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];