:将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素

问题遇到的现象和发生背景

无法获取想要的结果

问题相关代码,请勿粘贴截图
#include <stdio.h>
int main()
{    void find(int *p);
    int a[5][5],*num,i,j;
    printf("please enter matrix:\n");
    for(i=0;i<5;i++)
        scanf("%d %d %d %d %d",&a[i][1],&a[i][2],&a[i][3],&a[i][4],&a[i][5]);
    num=&a[0][0];
    find(a);
    printf("Now,matrix:\n");
    for(i=0;i<5;i++)
    {    for(j=0;j<5;j++)
            printf("%d  ",a[i][j]);
        printf("\n");
    }    
    return 0;    
}
void find(int *p)
{    int max=0,i,j,min=0,temp;
    for(i=0;i<=4;i++)
        for(j=0;j<=4;j++)
            {if(*(p+max)<*(p+i*5+j)) max=i*5+j;
             if(*(p+min)<*(p+i*5+j)) min=i*5+j;}//寻找最大值和最小值;
     temp=*(p+max);
     *(p+max)=*(p+13);
     *(p+13)=temp;
     temp=*(p);
     *(p)=*(p+min);
     *(p+min)=temp;
     
     
     for(i=0,min=0;i<=4;i++)
        for(j=0;j<=4;j++)
                if(  (  *(p+min)<*(p+i*5+j)  )  &&  ( *(p+min)>*(p) ))            min=i*5+j;
     temp=*(p+4);
     *(p+4)=*(p+min);
     *(p+min)=temp;
     
         
     for(i=0,min=0;i<=4;i++)
        for(j=0;j<=4;j++)
                if(  (  *(p+min)<*(p+i*5+j)  )  &&  ( *(p+min)>*(p) ) && (*(p+min)>*(p+4)))            min=i*5+j;
     temp=*(p+20);
     *(p+20)=*(p+min);
     *(p+min)=temp;            
                
     for(i=0,min=0;i<=4;i++)
        for(j=0;j<=4;j++)
                if(  (  *(p+min)<*(p+i*5+j)  )  &&  ( *(p+min)>*(p) ) && (*(p+min)>*(p+4))  && (*(p+min)>*(p+20)))            min=i*5+j;
     temp=*(p+24);
     *(p+24)=*(p+min);
     *(p+min)=temp;    
}




运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

#include <stdio.h>
int main()
{void change(int *p);
 int a[5][5],*p,i,j;
 printf("input matrix:\n");
 for (i=0;i<5;i++)
   for (j=0;j<5;j++)
     scanf("%d",&a[i][j]);
 p=&a[0][0];
 change(p);
 printf("Now,matrix:\n");
 for (i=0;i<5;i++)
  {for (j=0;j<5;j++)
     printf("%d ",a[i][j]);
   printf("\n");
  }
 return 0;
}
 
void change(int *p)          //交换函数
 {int i,j,temp;
  int *pmax,*pmin;
  pmax=p;
  pmin=p;
  for (i=0;i<5;i++)          //找最大值和最小值的地址,并赋给 pmax,pmin
    for (j=0;j<5;j++)
     {if (*pmax<*(p+5*i+j)) pmax=p+5*i+j;
      if (*pmin>*(p+5*i+j)) pmin=p+5*i+j;
     }
  temp=*(p+12);              //将最大值与中心元素互换
  *(p+12)=*pmax;
  *pmax=temp;
 
  temp=*p;                   //将最小值与左上角元素互换
  *p=*pmin;
  *pmin=temp;
 
        
                         //将a[0][1]的地址赋给pmin,从该位置开始找最小的元素
  for (i=0;i<5;i++)         //找第二最小值的地址赋给 pmin 
    for (j=0;j<5;j++)
    {if(i==0 && j==0) continue;
     if  (*pmin > *(p+5*i+j)) pmin=p+5*i+j;
    }
  temp=*pmin;               //将第二最小值与右上角元素互换 
  *pmin=*(p+4);
  *(p+4)=temp;
 
  for (i=0;i<5;i++)        //找第三最小值的地址赋给pmin 
    for (j=0;j<5;j++)
    {if((i==0  && j==0) ||(i==0  && j==4)) continue;
     if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;
    }
  temp=*pmin;              // 将第三最小值与左下角元素互换
  *pmin=*(p+20);
  *(p+20)=temp;
 
 
  for (i=0;i<5;i++)       // 找第四最小值的地址赋给pmin 
     for (j=0;j<5;j++)
     {if ((i==0  && j==0) ||(i==0  && j==4)||(i==4  && j==0)) continue;
      if (*pmin>*(p+5*i+j)) pmin=p+5*i+j;
     }
  temp=*pmin;             //将第四最小值与右下角元素互换
  *pmin=*(p+24);
  *(p+24)=temp;
 }