您的位置:首页 > 编程语言 > C语言/C++

C语言习题 矩阵元素变换

2016-03-17 21:25 393 查看


Problem D: C语言习题 矩阵元素变换

Description

将一个n×n(2<n<10,n为奇数)的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从左到右、从上到下顺序依次从小到大存放),写一

函数实现。用main函数调用。

Input

输入n和矩阵中的每个元素

Output

变换后的矩阵

Sample Input

5
25 13 9 5 1
16 17 18 19 6
15 24 4 20 7
14 23 22 21 8
2 12 11 10 3

Sample Output

1 13 9 5 2
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
3 12 11 10 4

HINT

#include<stdio.h>

void change(int *p,int n)

{

int *mi,*ma,i,j,t;

mi=p;

ma=p;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{

if(*(p+i*n+j)<*mi)

mi=p+i*n+j;

if(*(p+i*n+j)>*ma)

ma=p+i*n+j;

}

t=*(p+(n/2)*n+n/2);

*(p+(n/2)*n+n/2)=*ma;

*ma=t;

t=*p;

*p=*mi;

*mi=t;

mi=p+1;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{

if(*(p+i*n+j)<*mi&&(p+i*n+j)!=p)

mi=p+i*n+j;

}

t=*(p+n-1);

*(p+n-1)=*mi;

*mi=t;

mi=p+1;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{

if(*(p+i*n+j)<*mi&&(p+i*n+j)!=p&&(p+i*n+j)!=(p+n-1))

mi=p+i*n+j;

}

t=*(p+(n-1)*n);

*(p+(n-1)*n)=*mi;

*mi=t;

mi=p+1;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{

if(*(p+i*n+j)<*mi&&(p+i*n+j)!=p&&(p+i*n+j)!=(p+n-1)&&(p+i*n+j)!=(p+n*(n-1)))

mi=p+i*n+j;

}

t=*(p+n*(n-1)+n-1);

*(p+n*(n-1)+n-1)=*mi;

*mi=t;

}

int main()

{

void change(int *,int );

int **a,*p,i,j;

int n;

scanf("%d",&n);

p=(int*)malloc(n*n*sizeof(int));

a=(int**)malloc(n*sizeof(int *));

for(i=0; i<n; i++)

a[i]=p+n*i;

for (i=0; i<n; i++)

for (j=0; j<n; j++)

scanf("%d",&a[i][j]);

change(p,n);

for (i=0; i<n; i++)

{

for (j=0; j<n; j++)

printf("%d ",a[i][j]);

printf("\n");

}

free(p);

free(a);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: