ZJGSU OJ 2264 矩阵转换(指针题)

忘记放进函数里面了。。。
只用了指针,可以发现我这种方法用指针可以少定义一个变量,而且交换时更省时间,希望大家可以多多用指针,用熟练了对以后很有帮助(主观观点)
可以尝试封进函数,这样main函数可以看起来更简洁。
这也是一个好习惯。

题目描述
将一个5X5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下一次从小到大存放),写个一函数来实现,用main函数调用。(要求用指针来做)
输入
每组数据为5X5的矩阵,矩阵的数字为整数。有多组测试数据,直到输入文件结束。
输出
输出按题目要求改变后的矩阵,每组结果后空一行。
样例输入
35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
样例输出
11 34 33 32 12
30 29 28 27 26
25 24 35 22 21
20 19 18 17 16
13 23 15 31 14

#include<stdio.h>        //2246
#include<stdlib.h>
int main(){
    int compare(int a, int b);
    void change(int *a, int *b);
    int num[25],*max,*min,i,j,n,temp,decrease,*tmp;
    while(scanf("%d", &num[0])!=EOF){
        max=&num[0];min=&num[0];
        for(i=1; i<25; i++) {
            scanf("%d",&num[i]);
            if (compare(*max,num[i])<0) max=&num[i];
            if (compare(*min,num[i])>0) min=&num[i];
        }
        if(min==&num[12]) min=max;
        if(max!=&num[12]) change(max,&num[12]);
        change(min,&num[0]);
        min=&num[0];
        for ( i = 1; i < 4; i++){
            decrease=num[12]-num[0];
            for ( j = 0; j < 25; j++)
                if (compare(num[j],*min)>0 && decrease>compare(num[j],*min)){ 
                    decrease=compare(num[j],*min);
                    tmp=&num[j];
                }
            if(i==1){
                change(tmp,&num[4]);
                min=&num[4];
            }else if (i==2){
                change(tmp,&num[20]);
                min=&num[20];
            }else if (i==3){
                change(tmp,&num[24]);
                min=&num[24];
            }
        }
        for ( i = 0; i < 25; i++){
            printf("%d ",num[i]);
            if ((i+1)%5==0) printf("\n");
        }
        printf("\n");
    }
    return 0;
}
int compare(int a, int b) {
    return a-b;
}
void change(int *a, int *b) {
    int tmp;
    tmp=*a;*a=*b;*b=tmp;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值