文章
16
粉丝
66
获赞
4
访问
9.0k
题目要求原地逆置,看了另外几篇题解都是用的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;
}
登录后发布评论
暂无评论,来抢沙发