ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

清华大学历年考研复试机试真题 - 矩阵

2021-02-28 19:00:34  阅读:192  来源: 互联网

标签:lenMAX 真题 int void 矩阵 复试 转置 机试 移动


矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。

在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。

矩阵的运算是数值分析领域的重要问题。

你需要维护一个元素均为正整数的 n 阶矩阵,并支持以下几种操作:

将该矩阵转置,即沿主对角线翻转。
将该矩阵行循环移动k次,即第1行移动至第k+1行,第2行移动至第k+2行……,第n−k+1行移动至第1行……,第n行移动至第k行。
将该矩阵列循环移动k次,即第1列移动至第k+1列,第2列移动至第k+2列……,第n−k+1列移动至第1列……,第n列移动至第k列。
输入格式
第一行一个正整数 n 表示矩阵大小。

随后 n 行每行 n 个空格隔开的整数,表示矩阵中的元素。

随后一行一个正整数 q 表示操作次数。

随后 q 行每行表示一个操作,形如 1 或 2 k 或 3 k。

输出格式
对于每组数据,输出 n 行每行 n 个空格隔开的整数,表示依次进行所有操作后矩阵中的元素。

数据范围
对于30%的数据,保证n,q≤10。

对于另外20%的数据,保证只有操作1。

对于100%的数据,保证1≤n,q≤100,0≤k<n,矩阵中元素的值不超过109。

输入样例:
2
1 2
3 4
2
1
2 1
输出样例:
2 4
1 3

//矩阵转置 循环移动 行列变换

#include <stdio.h>
#define lenMAX 100
int mp[lenMAX][lenMAX];
void reverse(int n);               //矩阵转置
void rowshift(int n,int k);        //行循环下移 行列可以通过转置 来实现对方 本题用列实现行
void colshift(int n,int k);        //列循环右移
void swap(int *a,int *b);
int main(){
    int n,m,i,j,op,k,t;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        for(j=0;j<n;j++) scanf("%d",&mp[i][j]);
    }
    scanf("%d",&m);
    for(i=0;i<m;i++){
        scanf("%d",&op);
        if(op==1) reverse(n);
        else{
            scanf("%d",&k);
            if(op==2) rowshift(n,k);
            else colshift(n,k);
        }
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            printf("%d",mp[i][j]);
            if(j!=n-1) printf(" ");
        }
        printf("\n");
    }
}
void reverse(int n){
    int i,j;
    for(i=0;i<n;i++){
        for(j=i+1;j<n;j++) swap(&mp[i][j],&mp[j][i]);
    }
}
void rowshift(int n,int k){
    reverse(n);
    colshift(n,k);
    reverse(n);
}
void colshift(int n,int k){
    k%=n;
    int i,j,p,t[k];
    for(i=0;i<n;i++){
        p=0;
        for(j=n-k;j<n;j++) t[p++]=mp[i][j];
        for(j=n-k-1;j>=0;j--) mp[i][j+k]=mp[i][j];
        for(j=0;j<k;j++) mp[i][j]=t[j];
    }
}
void swap(int *a,int *b){
    int t=*a;
    *a=*b;
    *b=t;
}

标签:lenMAX,真题,int,void,矩阵,复试,转置,机试,移动
来源: https://blog.csdn.net/weixin_49548350/article/details/114236161

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有