矩阵的转置

时间: 1ms        内存:128M

描述:

注:本题只需要提交填写部分的代码

/*C*/

#include<stdio.h>
const int N=100;
int max(int x,int y){
    return x>=y?x:y;
}
int main()
{

    int a[N][N],b[N][N],i,j,maxv,*p;
    int n;
    scanf(“%d”,&n);
    for(i=0; i<n; i++)
        for(j=0;j<n;j++)
        scanf(“%d”,&a[i][j]);
        maxv=a[0][0];
        for(i=0;i<n-1;i++){
            for(j=i+1;j<n;j++)
            {
               int temp=*(a[i]+j);
                /*******************************
     请在该部分补充缺少的代码
     ********************************/
            }
        }

    for(i=0;i<n;i++){
        for(j=0;j<n;j++)
            printf(“%d “,b[i][j]);
        printf(“\n”);
    }
    printf(“Max:%d\n”,*p);
    return 0;
}

给定一个n阶矩阵,要求输出其转置矩阵,并将其最大值输出;

输入:

输入一个整型n(1<n<=99),然后输入n*n个整数

输出:

输出对应的n*n的转置矩阵以及里面的最大值

示例输入:

2
1 3
2 1

示例输出:

1 2
3 1
Max:3

提示:

参考答案(内存最优[1120]):

#include<stdio.h>
const int N=100;
int max(int x,int y){
    return x>=y?x:y;
}
int main()
{

    int a[N][N],b[N][N],i,j,maxv,*p;
    int n;
    scanf("%d",&n);
    for(i=0; i<n; i++)
        for(j=0;j<n;j++)
        scanf("%d",&a[i][j]);
        maxv=a[0][0];
        for(i=0;i<n-1;i++){
            for(j=i+1;j<n;j++)
            {
               int temp=*(a[i]+j);
*(a[i]+j)=*(a[j]+i);
                *(a[j]+i)=temp;
                b[i][j]=a[i][j];
                b[j][i]=a[j][i];
                b[i][i]=a[i][i];b[j][j]=a[j][j];
                maxv=max(a[i][j],max(maxv,a[j][i]));
                maxv=max(a[j][j],max(a[i][i],maxv));
                p=&maxv;
            }
        }

    for(i=0;i<n;i++){
        for(j=0;j<n;j++)
            printf("%d ",b[i][j]);
        printf("\n");
    }
    printf("Max:%d\n",*p);
    return 0;
}

参考答案(时间最优[2]):

#include<stdio.h>
const int N=100;
int max(int x,int y){
    return x>=y?x:y;
}
int main()
{

    int a[N][N],b[N][N],i,j,maxv,*p;
    int n;
    scanf("%d",&n);
    for(i=0; i<n; i++)
        for(j=0;j<n;j++)
        scanf("%d",&a[i][j]);
        maxv=a[0][0];
        for(i=0;i<n-1;i++){
            for(j=i+1;j<n;j++)
            {
               int temp=*(a[i]+j);
     *(a[i]+j)=*(a[j]+i);
               *(a[j]+i)=temp;
                b[i][j]=a[i][j];
                b[j][i]=a[j][i];
                b[i][i]=a[i][i];
                b[i+1][i+1]=a[i+1][i+1];
                p=&maxv;
                *p=max(b[i][j],*p);
                *p=max(b[j][i],*p);
                *p=max(b[i+1][i+1],*p);
            }
        }

    for(i=0;i<n;i++){
        for(j=0;j<n;j++)
            printf("%d ",b[i][j]);
        printf("\n");
    }
    printf("Max:%d\n",*p);
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。