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;
}