Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
#include <fstream.h>
int ser equals(int **a, const int m, const int n);
int main()
{
if stream fin (."matrix.txt", los :: in | ios:: nocreate);
if (!fin)
{
cout «"Нет файла matrix.txt" «endl;
return 0;
}
int m, n, 1,j;
fin» m» n;
int **a = new int *[m]; // выделение памяти
for (d = 0;i < m; i++)
a[i] = new int [n];
for ( i = 0;i < m; i++) // ввод нассива
for (j = 0; j < n) fin» a[i][j];
int line = ser_equals(a, m, n); // вызовфункции
if (line >= 0)cout «" Самая длинная серия в строке " «line;
else cout «" Серий одинаковых элементов нет ";
return 0;
}
int ser_equals ( int **а, const int m, const int n)
{
int I,j, count, line = -1, maxcount = 0;
for (1 - 0; 1< m; 1++)
{
count = 0;
for (j = 0; j < n - 1; j++)
{
if (a[i][j] == a[l][j + 1])
else
{
if (count > maxcount)
{
maxcount = count;
line = i;
}
count = 0;
}
}
if (count > maxcount)
{
maxcount = count;
line = i;
}
}
}
return line;
Алгоритм работы функции прост: в каждой строке выполняется сравнение соседних элементов (оператор 2). Если они равны, мы находимся внутри серии, при этом увеличиваем ее текущую длину. Она накапливается в переменной count, которая обнуляется перед обработкой каждой строки (оператор 1). Если же элементы не равны, это означает либо окончание серии, либо просто одиночный элемент (оператор 3). В этом случае надо посмотреть, не является ли данная серия самой длинной из рассмотренных и, если да, то запомнить ее длину и номер строки, в которой она встретилась (оператор 4). Для подготовки к анализу следующих серий в этой же строке надо обнулить счетчик count. Аналогичная проверка после цикла просмотра строки (оператор 5) выполняется для серии, которая расположена в конце строки, поскольку в этом случае ветвь else выполняться не будет.
Если в массиве нет ни одной серии одинаковых элементов, функция вернет значение, равное -1.
Дата публикования: 2015-10-09; Прочитано: 214 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!