题目描述
将一个n×n(2<n<10,n为奇数)的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从左到右、从上到下顺序依次从小到大存放),写一
函数实现。用main函数调用。
输入
输入n和矩阵中的每个元素
输出
变换后的矩阵
样例输入
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
样例输出
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
参考代码
#include <stdlib.h>
#include <stdio.h>
void change(int *p,int n)
{
int i,j,temp;
int *pmax,*pmin;
pmax=p;
pmin=p;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
if (*pmax<*(p+n*i+j)) pmax=p+n*i+j;
if (*pmin>*(p+n*i+j)) pmin=p+n*i+j;
}
temp=*(p+n*n/2);
*(p+n*n/2)=*pmax;
*pmax=temp;
temp=*p;
*p=*pmin;
*pmin=temp;
pmin=p+1;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
if (((p+n*i+j)!=p) && (*pmin > *(p+n*i+j))) pmin=p+n*i+j;
temp=*pmin;
*pmin=*(p+n-1);
*(p+n-1)=temp;
pmin=p+1;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
if(((p+n*i+j)!=(p+n-1)) && ((p+n*i+j)!=p) &&(*pmin>*(p+n*i+j))) pmin=p+n*i+j;
temp=*pmin;
*pmin=*(p+(n-1)*n);
*(p+(n-1)*n)=temp;
pmin=p+1;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
if (((p+n*i+j)!=p) &&((p+n*i+j)!=(p+n-1)) && ((p+n*i+j)!=(p+(n-1)*n)) && (*pmin>*(p+n*i+j)))
pmin=p+n*i+j;
temp=*pmin;
*pmin=*(p+n*n-1);
*(p+n*n-1)=temp;
}
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;
}
解析
暂无