用指针知识将一个5×5矩阵的最大值放在中心,四角按从左到右,从上到下的顺序存放最小值。 编程提示:利用打擂台法求最大值和最小值。
输入样例:
输入数据,之间用空格分隔,例如
11 12 13 14 15
21 31 66 88 23
10 42 68 31 35
65 68 99 82 29
71 72 73 74 75
输出样例:
输出格式数据格式如下,用一个空格分隔
10 71 75 14 11
21 31 66 88 23
15 42 99 31 35
65 68 68 82 29
12 72 73 74 13
二维——>一维 ([m][n]: x,y ——> x*n+y )
最大数——>a[2][2]——>[2*n+2]
最小数——>a[0][0]——>[0*n+0]
次小数——>a[0][4]——>[0*5+4]
次次小数——>a[4][0]——>[4*5+0]
次次次小数——>a[4][4]——>[4*5+4]
#include <stdio.h>
void fun(int *p,int n)
{
int *pmax,*pmin,*m;
int t;
pmax = pmin = m = p; //四个指针均指向一维空间的起始单元
//找最大数和最小数
for(m=m+1;m<p+n;m++)
{
if(*m > *pmax)
{
pmax = m;
}
if(*m < *pmin)
{
pmin = m;
}
}
//把最大数放到中心位置
t = *(p+2*5+2);
*(p+12) = *pmax;
*pmax = t;
//把最小值放到左上角
t = *p;
*p = *pmin;
*pmin = t;
//找次小数
pmin = p+1;
m = p + 2;
for(; m<p+n;m++)
{
if(*m < *pmin)
{
pmin = m;
}
}
//把次小数置换到右上角
t = *(p+4);
*(p+4) = *pmin;
*pmin = t;
//找次次小数
pmin = p+1;
m = p+2;
for(; m<p+n;m++)
{
if( (*m<*pmin)&&(m!=(p+4)) )
{
pmin = m;
}
}
//把次次小数置换到左下角 [4][0]——>4*5+0
t = *(p+20);
*(p+20) = *pmin;
*pmin = t;
//找出此次次次小数
pmin = p+1;
m = p+2;
for(; m<p+n;m++)
{
if( (*m<*pmin)&&(m!=(p+4))&&(m!=(p+20)) )
{
pmin = m;
}
}
//把次次次小数置换到右下角 [4][4]——>24
t = *(p+24);
*(p+24) = *pmin;
*pmin = t;
}
int main()
{
int a[5][5],i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
}
fun(*a,25);
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",a[i][j]);
}
printf("%d",a[i][j]);
printf("\n");
}
return 0;
}