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

来源:互联网 发布:手机声音放大器软件 编辑:程序博客网 时间:2024/05/18 01:06
“简单不先于复杂,而是在复杂之后” —— Alan Perlis

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

主函数已给定如下,提交时不需要包含下述主函数



/* C代码 */

int main()

{

    void change(int *,int );

    int **a,*p,i,j;

    int n;

    scanf("%d",&n);

    p=(int*)malloc(n*n*sizeof(int));

    a=(int**)malloc(n*sizeof(int *));

    for(i=0; i<n; i++)

        a[i]=p+n*i;

    for (i=0; i<n; i++)                     //输入矩阵

        for (j=0; j<n; j++)

            scanf("%d",&a[i][j]);

    change(p,n);                              //调用函数,实现交换

    for (i=0; i<n; i++)                    //输出已交换的矩阵

    {

        for (j=0; j<n; j++)

            printf("%d ",a[i][j]);

        printf("\n");

    }

    free(p);

    free(a);

    return 0;

}



/* C++代码 */



int main()

{

    void change(int *,int );

    int **a,*p,i,j;

    int n;

    cin>>n;

    p=new int[n*n];

    a=new int*[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;

    return 0;

}



源代码:

#include <iostream>using namespace std;void change(int *k,int p){    int t,*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;            else if(*(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;}int main(){    void change(int *,int );    int **a,*p,i,j;    int n;    cin>>n;    p=new int[n*n];    a=new int*[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;    return 0;}


0 0