指针练习5*5矩阵最大最小值
将最大值放在5*5矩阵中央
将左上右上左下右下分别放第1,2,3,4的最小值
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 5
void Move(int (*arr)[N]);
int * Max(int (*arr)[N]);
void Min4(int (*arr)[N]);
void Swap(int *x,int *y);
int main(){
int arr[5][5]={{23,33,44,55,11},{12,14,15,16,17},{18,33,77,88,99},{100,111,222,57,85},{43,24,30,40,50}};
printf("before change:\n");
for(int i=0;i<5;i++){
for(int j=0;j<5;j++)
printf("%d ",arr[i][j]);
printf("\n");
}
Move(arr);
printf("after change:\n");
for(int i=0;i<5;i++){
for(int j=0;j<5;j++)
printf("%d ",arr[i][j]);
printf("\n");
}
}
void Move(int (*arr)[N]){
int* p=Max(arr);
int temp=arr[2][2];arr[2][2]=*p;*p=temp;
Min4(arr);
}
int *Max(int (*arr)[N]){
int *max=arr[0];
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(*max<arr[i][j])
max=&arr[i][j];
return max;
}
void Min4(int (*arr)[N]){
int *p[4];int i,j;
p[0]=&arr[0][0];
p[1]=&arr[0][4];
p[2]=&arr[4][0];
p[3]=&arr[4][4];
//first
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(*p[0]>arr[i][j]){
p[0]=&arr[i][j];
}
}
}
Swap(p[0],&arr[0][0]);
//second
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(*p[1]>arr[i][j]&&(&arr[i][j])!=&arr[0][0]){
p[1]=&arr[i][j];
}
}
}
Swap(p[1],&arr[0][4]);
//third
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(*p[2]>arr[i][j]&&(&arr[i][j])!=&arr[0][0]&&(&arr[i][j]!=&arr[0][4])){
p[2]=&arr[i][j];
}
}
}
Swap(p[2],&arr[4][0]);
//fourth
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(*p[3]>arr[i][j]&&(&arr[i][j])!=&arr[0][0]&&(&arr[i][j])!=&arr[0][4]&&(&arr[i][j])!=&arr[4][0]){
p[3]=&arr[i][j];
}
}
}
Swap(p[3],&arr[4][4]);
}
void Swap(int *x,int *y){
int temp=*x;
*x=*y;
*y=temp;
}

浙公网安备 33010602011771号