一、题目描述
循环输入。每组数据先输入一个 n (n≤10),然后 n 行 n 列 数据代表一个矩阵,每个数据为一个整数, 然后再给出一个数字 R ,输出这个矩阵按照顺时针旋转 90R 度以后的矩阵。当没有任何输入时,程序结束。
方法:
(1)因为旋转几次90的代码是一样的,所以只要我们能旋转90读,再进行多次旋转就能达到旋转90R度的效果
(2)经过分析,可以得到
- 简单画个图看一下,对于原本是 i 行的元素,变成了 n − 1 − i列去了;
- 而原本 j 列的元素,变到了 j 行去了;
- 所以我们掌握了核心,也就是:
- mat [ i ] [ j ](前) → mat [ j ] [ n − 1 − i ](后)
(3)于是我们在写交换代码的时候,用将旋转前的数赋值给旋转后的位置
(4)还有就是这里要重新建立一个tmpmat来暂时放存旋转后的数组,否则会出现变量污染的情况
(5)然后依次在主函数中写矩阵的输入,矩阵的旋转,矩阵的替换,矩阵的输出即可
代码如下:
#include "stdio.h"
#define maxn 11
int mat[maxn][maxn];
int tmpmat[maxn][maxn];
int main()
{
int i,j;
int n,r;
while(scanf("%d",&n)!=EOF)
{
scanf("%d",&r);
r%=4;
//矩阵的输入
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
scanf("%d",&mat[i][j]);
}
}
//矩阵的交换
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
tmpmat[j][n-i-1]=mat[i][j];
}
}
//矩阵的替换
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
mat[i][j]=tmpmat[i][j];
}
}
//矩阵的输出
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
printf("%d ",mat[i][j]);
}
printf("\n");
}
printf("\n");
}
}