• 写一个函数实现:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放)之解法改写


    #include<stdio.h>
    void change(int *p){
       int i,j,temp;
       int *pmax,*pmin;
       
       // 初始化最大值和最小值的指针
       pmax=p;
       pmin=p;
       
       // 遍历矩阵,寻找最大和最小值
       for(i=0;i<5;i++)
           for(j=i;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;
       pmin=p+1;
       
       // 第二次遍历,寻找次小值并放置到特定位置
       for(i=0;i<5;i++)
           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;
       pmin=p+1;
       
       // 第三次遍历,进一步确定并交换次小值的位置
        for(i=0;i<5;i++)
            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;
        pmin=p+1;
        
        // 第四次遍历,最后确定并交换次小值的位置
        for(i=0;i<5;i++)
            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;
    }

    /**
     * 主函数,用于输入矩阵数据并调用change函数进行排序,最后输出排序后的矩阵。
     */
    int main(){
        int a[5][5],*p,i,j;
        printf("请输入矩形:");
        // 输入矩阵元素
        for(i=0;i<5;i++)
            for(j=0;j<5;j++)
                scanf("%d",&a[i][j]);
        
        p=&a[0][0]; // 获取矩阵的首地址
        change(p); // 调用排序函数
        
        printf("排序后:");
        // 输出排序后的矩阵
        for(i=0;i<5;i++){
            for(j=0;j<5;j++)
                printf("%d ",a[i][j]);
            printf("\n");
        }
        return 0;
    }
     

  • 相关阅读:
    使用单调栈解决 “下一个更大元素” 问题
    Mybatis中的缓存相关简介说明
    2┃音视频直播系统之浏览器中通过 WebRTC 拍照片加滤镜并保存
    服务器稳定性测试-LTP压力测试方法及工具下载
    Sui在AIBC Eurasia奖项评选中被评为2024年度最佳区块链解决方案
    Java中的volatile为什么不能保证原子性
    【华为】测试工程师面试题汇总,你可知道华为的高薪技术岗有多香~
    169. 多数元素
    TongWeb8 专用机使用指导
    S5PV210——SDRAM的初始化
  • 原文地址:https://blog.csdn.net/m0_65061804/article/details/138043576