Нахождение максимальной подпоследовательности
Задача такая: Создать файл из m вещественных чисел. Найти длину k самой длинной «пилообразной (зубьями вверх)» последовательности идущих подряд чисел: X[p+1] < X[p + 2] < X[p+3] <…< X[p + k]
(То есть по сути найти максимальную возрастающую подпоследовательность, если я все правильно понимаю)
Не понимаю, какое условие я не учел, поскольку ломается при некоторых тестах, например при: m=10 сгенерировано 10 чисел и получилась последовательность: 27686, 9202, 28537, 2195, 3297, 2320, 20844, 30995, 6556, 25712, Программа выдает ответ 2, хотя очевидно, что здесь должен быть ответ 3. (2320, 20844, 30995 максимальная возрастающая последовательность).
Вот код:
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <algorithm>
using namespace std;
int main()
{
srand(time(NULL));
double x, m; //m - количество вещественных чисел
int n, n1 = n, len = 1, maxlen = 1; //n - 'текущее' число, n1 - 'следующее' число
cout << "Введите количество вещественных чисел m, чтобы записать их в файл: " << endl;
cin >> m;
ofstream f1;
f1.open("test1.txt");
for (int i = 0; i < m; i++) //заполнение файла случайными числами
{
x = rand();
f1 << x << endl;
}
f1.close();
ifstream f;
f.open("test1.txt");
while (!f.eof())
{
n1 = n;
f >> n;
if (n1 > n)
{
len++;
}
else
{
len = 1;
}
maxlen = max(maxlen, len);
}
cout << maxlen;
}
Ответы (1 шт):
Вы вообще-то ищете убывающую последовательность.
Смените знак на
if (n1 < n)
И еще — учтите, что при входе в цикл у вас n1 и n содержат (пусть и одинаковый) мусор.