题目描述
输入一个N*M的矩阵,要求将这个矩阵向左旋转90度后输出
比如现在有矩阵 :
1 2 3
4 5 6
向左旋转90度后的矩阵变为:
3 6
2 5
1 4
输入
第一行输入T表示有T个测试实例
第二行输入矩阵维度N和M,表示N行和M列
第三行起输入矩阵数据,矩阵数据用自然数表示
下面依次类推
输出
输出左转90度的矩阵
注意每行最后一个数据不带空格,直接换行
IO模式
本题IO模式为标准输入/输出(Standard IO),你需要从标准输入流中读入数据,并将答案输出至标准输出流中。

代码如下:
#include <stdio.h>
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int a[n][m],b[m][n];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
scanf("%d",&a[i][j]);
b[m-1-j][i]=a[i][j];
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d",b[i][j]);
if(j!=n-1)
printf(" ");
}
printf("\n");
}
}
return 0;
}
这个题的重点在于推矩阵对应元素位置的关系
我是把例子里的位置变化写了一下(a为原数组,b为左转后的数组)
a b
0,0 2,0
0,1 1,0
0,2 0,0
1,0 2,1
1,1 1,1
1,2 0,1
可以看出,b的列标等于a的行标,所以b[不知道][i]=a[][j]
接下来观察b的行标与a的关系,既然a的行标已经用过了,考虑a的列标,发现a的列标与b的行标相加都等于2,即n-1,于是得到b[m-1-j][i]=a[i][j]
这样最大的问题就解决了
要分享的大概就这些,如果有更好的方法欢迎交流!
如果有帮到你请点个赞吧!也可以关注我,以后会分享更多,谢谢!
(专栏里面还有更多题哦)
7488

被折叠的 条评论
为什么被折叠?



