C语言刷题(31):将一个5x5的矩阵中的最大元素放在中心,4个角分别放在4个最小元素,(顺序从左到右,从上到下从小到大存放)

小憨总结:
去除二维数组中一个数据时,不是i!=x&&!=j ,而是(!(ix&&jy)

#include "stdio.h"
void main()
{
    void solve(int (*p)[5]);
    int a[5][5];
    int i,j;
    printf("input array:\n");
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            scanf("%d",*(a+i)+j);
        }
    }
    solve(a);
    printf("solved:\n");
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%3d ",*(*(a+i)+j));
        }
        printf("\n");
    }
}
void solve(int (*p)[5])
{
    void swap(int *,int *);
    int i,j,t,ti,tj,min[4],max;
    min[0] = p[0][0];
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            if(min[0]>*(*(p+i)+j))
            {
                min[0] = *(*(p+i)+j);
                ti = i;
                tj = j;
            }
        }
    }
    if(min[0]!= p[0][0])
    {
        swap(*p,*(p+ti)+tj);
    }


    min[1] = p[0][4];
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            if(min[1]>*(*(p+i)+j))
            {
                if(!(i==0&&j==0))
                {
                    min[1] = *(*(p+i)+j);
                    ti = i;
                    tj = j;
                }

            }
        }
    }
     if(min[1]!= p[0][4])
    {
        swap(*p+4,*(p+ti)+tj);
    }

    min[2] = *(*(p+4));
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            if(min[2]>*(*(p+i)+j))
            {
                if((!(i==0&&j==0))&&(!(i==0&&j==4)))
                {
                    min[2] = *(*(p+i)+j);
                    ti = i;
                    tj = j;
                }
            }
        }
    }
     if(min[2]!= p[4][0])
    {
        swap(*(p+4),*(p+ti)+tj);
    }

   min[3] = *(*(p+4)+4);
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
                if((min[3]>*(*(p+i)+j)))
                {
                    if((!(i==0&&j==0))&&(!(i==4&&j==0))&&(!(i==0&&j==4)))
                    {
                        min[3] = *(*(p+i)+j);
                        ti = i;
                        tj = j;
                    }

                }
        }
    }
     if(min[3]!= p[4][4])
    {
        swap(*(p+4)+4,*(p+ti)+tj);
    }

    max = *(*(p+2)+2);
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            if(max<*(*(p+i)+j))
            {
                max = *(*(p+i)+j);
                ti = i;
                tj = j;
            }
        }
    }
     if(max!= p[2][2])
    {
        swap(*(p+2)+2,*(p+ti)+tj);
    }
}
void swap(int *a,int *b)
{
    int t;
    t = *a;
    *a = *b;
    *b = t;
}
/*
运行结果:
input array:
8  2  3  4  55
6  7  1 9  10
11 12 13 14 15
16 17 18 19 27
21 22 23 24 25
solved:
  1  13  21  25   2
  6   7   8   9  10
 11  12  55  14  15
 16  17  18  19  27
  3  22  23  24   4
*/

发布了45 篇原创文章 · 获赞 7 · 访问量 1595

猜你喜欢

转载自blog.csdn.net/qq_38173631/article/details/104025661