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

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

(顺序为从左到右,从上到下,从小到大存放)写一个函数实现之。用main函数调用

  • 代码如下:
#include<stdio.h>
void change(int *p);
int main()
{
    int a[5][5],*p;
    printf("input a:\n");
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            scanf("%d",&a[i][j]); //输入数组每个数
        }
    }
    p=&a[0][0];
    change(p);
    for(int k=0;k<5;k++){
        for(int t=0;t<5;t++){
            printf("%d  ",a[k][t]);//将调换后的数组输出
        }
        printf("\n");
    }
    return 0;
}
void change(int *p)
{
    int temp,i,j;
    int *pmax,*pmin;
    pmax=p;
    pmin=p;
    for(i=0;i<5;i++){
        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;  //最小值先和数组第一个元素交换位置,*p的意思就是a数组中第一个
    *pmin=temp;  //*p相当于a[0][0]
    pmin=p+1;
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            if(((p+5*i+j)!=p) && (*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(((p+5*i+j)!=(p+4)) &&((p+5*i+j)!=p)&&(*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(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))
                &&(*pmin>*(p+5*i+j)))  pmin=p+5*i+j;
        }
    }
    temp=*pmin;
    *pmin=*(p+24);//接着找第四个小的值,和右下角的值交换顺序
    *(p+24)=temp;

}

运行结果如图:
在这里插入图片描述

  • 此方法为笨方法,如果有更好的方法,欢迎多多指点。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值