У меня есть написанный код к этой задаче, только в ней не выделена динамическая память.
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand( time( NULL ) );
int a[100][100], b[100][2], N, M, i, j, t, k;
printf("M= ");
scanf("%d", &M);
printf("N= ");
scanf("%d", &N);
printf("Ishodn matr:\n");
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
{
a[i][j]=rand()%7;
printf("%2d", a[i][j]);
}
printf("\n");
}
for(j=0; j<N; j++)
{
b[j][0]=a[0][j];
b[j][1]=1;
for(i=0; i<M; i++)
{
t=0;
for(k=0; k<M; k++)
if(a[i][j]==a[k][j])
t++;
if(t>b[j][1] || (t==b[j][1] && b[j][0]>a[i][j]))
{
b[j][1]=t; b[j][0]=a[i][j];
}
}
}
for(j=0; j<N-1; j++)
{
t=j;
for(i=j; i<N; i++)
if(b[i][0]<b[t][0])
t=i;
for(i=0; i<M; i++)
{
k=a[i][j];
a[i][j]=a[i][t];
a[i][t]=k;
}
k=b[j][0]; b[j][0]=b[t][0]; b[t][0]=k;
}
printf("Preobr matr:\n");
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
printf("%2d", a[i][j]);
printf("\n");
}
return 0;
}