文章

16

粉丝

66

获赞

4

访问

9.0k

头像
矩阵转置 题解:
P1393 华中科技大学/厦门大学机试题
发布于2024年3月12日 21:11
阅读数 549

题目要求原地逆置,看了另外几篇题解都是用的swap交换vector向量,有一个更离谱的直接用二维数组,甚至还用新设置一个值凑三个交换,简直明目张胆地无视题目要求。

但是我觉得题目可能没有这么简单,如果要原地逆置,相似的情形只有链表原地转置,就是设置100个链表存每行的元素,然后原地逆置,但是矩阵逆置跟链表头插法原地还是有不同的,比如说,矩阵每行其实是中间不逆置,而是两边逆置,这样好像用链表也是行不通。

于是我想到用队列,先将矩阵看作一维数组,这样观察矩阵转置规律可以发现,转置过后,每一行输出的,就是按照输入顺序对n取余得到余数相同的数字,这些余数相同的数字就是它们输出矩阵的行号。

#include <cstdio>
#include <queue>
using namespace std;

queue<int> num[101];

int main(){
  int n;
  scanf("%d",&n);
  for(int i=0;i<n*n;i++){
    int temp;
    scanf("%d",&temp);
    num[i%n].push(temp);
  }
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      int temp=num[i].front();
      num[i].pop();
      printf("%d ",temp);
    }
    printf("\n");
  }
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发