• 10.10 将一个5×5的矩阵中最大的元素放在中心,4个角分别放在4个最小的元素(按从左到右,从上到下的顺序,依次从小到大存放),写一个函数实现之,并用main函数调用。


    10.10 将一个5×5的矩阵中最大的元素放在中心,4个角分别放在4个最小的元素(按从左到右,从上到下的顺序,依次从小到大存放),写一个函数实现之,并用main函数调用。

    #include <stdio.h>
    
    int main(){
        void change(int * p);
        int num[5][5];
        int i,j,* p;
        p=&num[0][0];
        printf("请输入矩阵的值:
    ");
        for(i=0; i<5; i++){
            for(j=0; j<5; j++){
                scanf("%d",&num[i][j]);
            }
        }
            //输出原来的矩阵
            printf("所输入的矩阵为:
    ");
            for(i=0; i<5; i++){
                for(j=0; j<5; j++){
                    printf("%3d",num[i][j]);
                }
                printf("
    ");
            }
        //调用函数
        change(p);
            //输出调整后的矩阵
            printf("按要求调整后的矩阵为:
    ");
            for(i=0; i<5; i++){
                for(j=0; j<5; j++){
                    printf("%3d",num[i][j]);
                }
                printf("
    ");
            }
        return 0;
    }
    
    void change(int * p){
        //printf("%d
    ",p[3]);
        //找到最大值,并放到中间
        int i,j,t,* max=p;
        for(i=0; i<5; i++){
            for(j=0; j<5; j++){
                if(* max < * (p+i*5+j)) max=p+i*5+j;
            }
        }
        t=*(p+2*5+2);
        *(p+2*5+2)=*max;
        *max=t;
    
        int * min=p;
        //找到最小的值
        for(i=0; i<5; i++){
            for(j=0; j<5; j++){
                if(*min > * (p+i*5+j)){
                    min=p+i*5+j;
                }
            }
        }
        //最小的值和第一个元素交换
        t=*min;
        *min=*p;
        *p=t;
        
        min=p+1;//从第二个元素开始
    
        //找到次小的值
        for(i=0; i<5; i++){
            for(j=0; j<5; j++){
                if(i==0 && j==0) continue;
                else if(*min > *(p+i*5+j)){
                        min=p+i*5+j;
                    }
                }
        }
        //次小的值和第5个元素交换
        t=*min;
        *min=*(p+4);
        *(p+4)=t;
        min=p+1;//从第二个元素开始
    
        //找到第三小的值
        for(i=0; i<5; i++){
            for(j=0; j<5; j++){
                if((i==0 && j==0) || (i==0 && j==4)) continue;
                else if(*min > *(p+i*5+j)){
                        min=p+i*5+j;
                    }
                }
        }
        //第三小的值和第21个元素交换
        t=*min;
        *min=*(p+20);
        *(p+20)=t;
        min=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;
                else if(*min > *(p+i*5+j)){
                        min=p+i*5+j;
                    }
                }
        }
        //第四小的值和第25个元素交换
        t=*min;
        *min=*(p+24);
        *(p+24)=t;
    }

    结果:

  • 相关阅读:
    SCOI2020游记
    关于我
    WC2020游记
    CSP-S 2019 游记
    回文自动机学习笔记
    全自动数字论证机(迫真)
    树状数组上二分
    《伊豆的舞女》 读书小记
    雅礼集训2019 Day5
    雅礼集训2019 Day4
  • 原文地址:https://www.cnblogs.com/Allen-win/p/7273289.html
Copyright © 2020-2023  润新知