矩阵旋转问题
2025-08-10 16:09:39
发布于:浙江
题目大意:一个矩阵,处理后最外圈顺时针转90°,往里一圈变为逆时针转90°,再进去再变回顺时针......以此类推
非完整代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int a[105][105];
int b[105][105];
int main(){
cin>>n;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
cin>>a[i][j];
}
}
if(n % 2 == 0){
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
if(i <= n / 2 && j <= n / 2){
if(min(i,j) % 2 == 0){
//正向
b[n + 1 - j][i] = a[i][j];
}else{
//逆向
b[j][n + 1 - i] = a[i][j];
}
}else if(i <= n / 2 && j > n / 2){
if(min(i,n + 1 - j) % 2 == 0){
//正向
b[n + 1 - j][i] = a[i][j];
}else{
//逆向
b[j][n + 1 - i] = a[i][j];
}
}else if(i > n / 2 && j <= n / 2){
if(min(n + 1 - i,j) % 2 == 0){
//正向
b[n + 1 - j][i] = a[i][j];
}else{
//逆向
b[j][n + 1 - i] = a[i][j];
}
}else if(i > n / 2 && j > n / 2){
if(min(n + 1 - i,n + 1 - j) % 2 == 0){
//正向
b[n + 1 - j][i] = a[i][j];
}else{
//逆向
b[j][n + 1 - i] = a[i][j];
}
}
}
}
}
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
cout<<b[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
思路:先分析是在矩阵的第几层,然后再按照顺时针或逆时针方向进行指定旋转的操作,从数组a中转移到b中,最后输出。
全部评论 3
今天夺少分啊
2025-08-10 来自 江苏
0这道题卡我20min,有点ex
2025-08-10 来自 江苏
0这题我只考虑了
n % 2 == 0
的情况,都没写完。。。2025-08-10 来自 浙江
0好可惜啊,T5很简单的,基本能秒
2025-08-10 来自 江苏
1
我们称之为高效
2025-08-10 来自 上海
0这码风也是演都不演了
2025-08-10 来自 浙江
0这个真不一定 dev有个玩意能格式化代码的
2025-08-10 来自 上海
0这也没格式化啊
2025-08-10 来自 浙江
0我就那么纳闷了,这码风有咋了?有啥问题吗?
2025-08-10 来自 浙江
0
有帮助,赞一个