Консультация № 117312
07.01.2008, 10:24
0.00 руб.
0 2 2
Помогите пажлуста решить задачу Текст задачи таков
Дана целочисленная прямоугольная матрица надо опредилить № строки в которой находится самая длинная серия одинаковых элементов

Обсуждение

Неизвестный
07.01.2008, 12:25
общий
это ответ
Здравствуйте, Razum89!

Как-то давно я это делал. Решил я эту задачу своеобразно - использовал сортировку.
Текст программы получился не маленький :)

#include <stdio.h>
#define compGT(a,b) (a > b)
typedef int T; // Тип элемента для сортировки
typedef int tblIndex; // тоже самое сдесь подставить...

// Сортировка включением
void insertSort(T *a, tblIndex lb, tblIndex ub) {
T t;
tblIndex i, j;

for (i = lb + 1; i <= ub; i++) {
t = a[i];

for (j = i-1; j >= lb && compGT(a[j], t); j--)
a[j+1] = a[j];

a[j+1] = t;
}
}

int main(void)
{
// исходная матрица
int arr[3][5] = { {1,1,3,1,3}, {1,0,1,2,2}, {3,3,2,3,3} };
// матрица stat для хранения числа(stat[n][1]) и его
// повторений(stat[n][0]) в соответствующей строке матрицы arr
int stat[3][2] = {0,0, 0,0, 0,0};
unsigned i, j, count = 1;

// сортируем элементы каждой строки матрицы и...
for(i = 0; i < 3; i++)
insertSort(arr[i], 0, 4);
//... выводим матрицу
for(i = 0; i < 3; i++) {
for(j = 0; j < 5; j++)
printf("%d ", arr[i][j]);
puts("");
}
puts("");

// здесь мы перебираем элементы матрицы и
// записываем число повторений какого-то числа
// в stat[n][0], а само число в stat[n][1]
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
if(arr[i][j] == arr[i][j+1])
count++;
else
{
if(stat[i][0] < count)
{
stat[i][0] = count;
count = 1;
stat[i][1] = arr[i][j];
}
}
}
if(stat[i][0] < count) {
stat[i][0] = count;
stat[i][1] = arr[i][j];
}
count = 1;
}
// в полученной матрице stat ищим максимальное
// число повторений и выводим соответствующий этому элемент
for(i = 1, j = stat[count = 0][0]; i < 3; i++)
if(j < stat[i][0]) {
j = stat[i][0];
count = i;
}
printf("Number %d, Column %d\n", arr[count][1], count+1);

return 0;
}
Неизвестный
09.01.2008, 04:44
общий
это ответ
Здравствуйте, Razum89!
Попробуйте использовать функцию, приведенную в приложении. На вход она получает саму матрицу и ее размеры. Выход - номер строки с максимальной последовательностью.

Приложение:
int max_sequence_row(int **matrix, int n, int m) { int row_num = 0; int max = 0; for(int i=0; i<n; i++) { int count = 0; int max_len = 0; for(int j=0; j<m; j++) { count++; if((j == m-1) || (matrix[i][j] != matrix[i][j+1])) { if(count > max_len) max_len = count; count = 0; } } if(max_len > max) { max = max_len; row_num = i; } } return row_num;}
Форма ответа