指针练习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;
}
posted @   zhongta  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示