矩阵旋转问题
【问题描述】
输入矩阵阶数n,给n阶矩阵的元素按行序由1到n*n顺序赋值,然后将其向右旋转90度,输出旋转后的矩阵。
【输入形式】
控制台输入阶数n。
【输出形式】
输出旋转90度后的矩阵,其中每个数字占4位字符的宽度,向右对齐。
【样例输入】
4
【样例输出】
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i=0,j=0,t=1,x=0,y=0;
int a[50][50];
int b[50][50];
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(;j<t*n;j++)
{
a[i][j]=j+1;
//printf("%d ",a[i][j]);
}
//printf("\n");
j = t*n;
t++;
}
for(y=n-1,i=0;i<n,y>=0;i++,y--)
{
for(x=0,j=0;x<n,j<n;x++,j++)
{
b[x][y] = a[i][j];
}
}
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
{
printf("%d ",b[x][y]);
}
printf("\n");
}
return 0;
}
运行结果及报错内容:
输入4,结果输出了
0 0 0 1
0 0 0 2
0 0 0 3
0 0 0 4
我想要达到的结果:
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
可以帮我看看是哪里出问题了吗?
下面是一个示例代码:
#include
int main() {
int n;
scanf("%d", &n);
// 定义并初始化原矩阵
int matrix[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 旋转后的矩阵
int rotated_matrix[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// 注意旋转90度后的元素下标发生了变化
rotated_matrix[j][n - 1 - i] = matrix[i][j];
}
}
// 输出旋转后的矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// %4d表示输出一个整数,宽度为4,右对齐
printf("%4d", rotated_matrix[i][j]);
}
printf("\n");
}
return 0;
}
在代码中,首先输入矩阵的阶数,然后输入矩阵的元素。随后,我们定义旋转后的矩阵,并通过改变下标的方式对原矩阵进行旋转。最后,输出旋转后的矩阵即可。
需要注意,在旋转后的矩阵中,每个元素的下标与原矩阵中的下标是不一样的,因此需要计算旋转后的下标。比如,对于一个3阶矩阵,旋转90度后第1行第1列的元素原来位于第3行第1列,第1行第2列的元素