Problem F: C语言习题 矩阵元素变换

来源:互联网 发布:歌曲消除人声软件 编辑:程序博客网 时间:2024/06/04 18:32
能测试中,如有问题请联系17862809558 17862818011 18865513850 18865513930

Problem F: C语言习题 矩阵元素变换

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 389  Solved: 198
[Submit][Status][Web Board]

Description

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

Input

输入n和矩阵中的每个元素

Output

变换后的矩阵

Sample Input

525 13 9 5 116 17 18 19 615 24 4 20 714 23 22 21 82 12 11 10 3

Sample Output

1 13 9 5 2 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 3 12 11 10 4 

HINT

#include <iostream>
usingnamespace std;
 
voidchange(int*k,intp)
{
    intt,*min,*max,i,j;
    min=max=k;
    for(i=0; i<p; i++)
        for(j=0; j<p; j++)
        {
            if(*(k+p*i+j)<*min)
                min=k+p*i+j;
            elseif(*(k+p*i+j)>*max)
                max=k+p*i+j;
        }
    t=*max;
    *max=*(k+(p*p)/2);
    *(k+(p*p)/2)=t;
    t=*min;
    *min=*k;
    *k=t;
 
    min=&*(k+1);
    for(i=0; i<p; i++)
        for(j=0; j<p; j++)
            if((k+p*i+j)!=k)
                if(*(k+p*i+j)<*min)
                    min=k+p*i+j;
    t=*min;
    *min=*(k+p-1);
    *(k+p-1)=t;
    min=&*(k+1);
    for(i=0; i<p; i++)
        for(j=0; j<p; j++)
            if((k+p*i+j)!=(k+p-1)&&(k+p*i+j)!=k)
                if(*(k+p*i+j)<*min)
                    min=k+p*i+j;
    t=*min;
    *min=*(k+p*(p-1));
    *(k+p*(p-1))=t;
    min=&*(k+1);
    for(i=0; i<p; i++)
        for(j=0; j<p; j++)
            if((k+p*i+j)!=k&&(k+p*i+j)!=(k+p-1)&&(k+p*i+j)!=(k+p*(p-1)))
                if(*(k+p*i+j)<*min)
                    min=k+p*i+j;
    t=*min;
    *min=*(k+p*p-1);
    *(k+p*p-1)=t;
}
intmain()
{
    voidchange(int*,int);
    int**a,*p,i,j;
    intn;
    cin>>n;
    p=newint[n*n];
    a=newint*[n];
    for(i=0; i<n; i++)
        a[i]=p+n*i;
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
            cin>>a[i][j];
    change(p,n);
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
    delete[]p;
    delete[]a;
    return0;
}

0 0