有一个NxN整数矩阵,旋转一次为90度,矩阵既可以顺时针旋转也可以逆时针旋转。
现在给定一个NxN的矩阵、矩阵的阶数N和矩阵旋转次数k,k为负数时,代表矩阵逆时针旋转的次数,k为正数时,代表矩阵顺时针旋转次数。
请输出旋转后的NxN矩阵。
数据范围:0 < n <300,矩阵中的值满足 0 <val<1000
输入格式:
输入第一行矩阵阶数n,旋转次数k;
第二行矩阵中的各个元素
输出格式:
输出旋转后的矩阵,每个元素后面都有一个空格
输入样例:
在这里给出一组输入。例如:
3 1
1 2 3
4 5 6
7 8 9
输出样例:
在这里给出相应的输出。例如:
7 4 1
8 5 2
9 6 3
思路:矩阵经过旋转后的结果,可以把原矩阵按照不同方向和方法进行打印而得到
原矩阵:
1 2 3
4 5 6
7 8 9
旋转90度:(一次)其实是把原矩阵按列为外层循环(由小到大),按行为内层循环(由大到小)遍历
7 4 1
8 5 2
9 6 3
旋转180度:(二次)其实是把原矩阵按列为外层循环(由大到小),按列为内层循环(由大到小)遍历
9 8 7
6 5 4
3 2 1
旋转270度:(三次)其实是把原矩阵按列为外层循环(由大到小),按行为内层循环(由小到大)遍历
3 6 9
2 5 8
1 4 7
旋转360度:(四次)
1 2 3
4 5 6
7 8 9
逆时针旋转后的结果与上述顺时针旋转结果一致(并不一一对应)
文章来源:https://www.toymoban.com/news/detail-776344.html
#include<stdio.h>
int main()
{
int n,k,data[301][301];
scanf("%d%d",&n,&k); //矩阵的阶数,和旋转的次数
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&data[i][j]);
}
}
k%=4;
if(k==0) //旋转四次以后与原矩阵相同
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%d ",data[i][j]);
}
printf("\n");
}
}
else if(k==1||k==-3) //顺时针旋转1次与逆时针旋转3次一致
{
for(int j=0;j<n;j++)
{
for(int i=n-1;i>=0;i--)
{
printf("%d ",data[i][j]);
}
printf("\n");
}
}
else if(k==2||k==-2) //顺时针旋转2次与逆时针旋转两次一致
{
for(int i=n-1;i>=0;i--)
{
for(int j=n-1;j>=0;j-- )
{
printf("%d ",data[i][j]);
}
printf("\n");
}
}
else if(k==-1||k==3) //顺时针旋转三次与逆时针旋转一次相同
{
for(int j=n-1;j>=0;j--)
{
for(int i=0;i<n;i++ )
{
printf("%d ",data[i][j]);
}
printf("\n");
}
}
}
文章来源地址https://www.toymoban.com/news/detail-776344.html
到了这里,关于矩阵旋转(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!