fujx23 2022-01-03 13:30 采纳率: 91.7%
浏览 25
已结题

:将一个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;    
}




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

1条回答 默认 最新

  • fuill 2022-01-03 13:48
    关注
    
    #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;
     }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月16日
  • 已采纳回答 1月8日
  • 创建了问题 1月3日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line