如何生成一个旋转矩阵数组

要求就是输入一个整数N,输出一个N*N的矩阵,该矩阵是一个顺时针螺旋矩阵。废话不多说直接码代码(C语言)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#define N 100
// 输入一个介于1到100之间的一个整数
int scanNum()
{
int num;
do{
printf("Please enter a number: ");
scanf("%d",&num);
if (num<=0||num>N){
printf("please enter a true number.Just between 0 to 100.\n");
}
}while(num<=0||num>N);
return num;
}
// 递归,核心
void funArray(int a[N][N],int num)
{
int i=0;
int j=0;
// static这个非常重要,如果没有就不能做到m,n的增加
static int n=0;
static int m=1;
// 输出最上面的行
for(i=n;i<num-n;i++)
{
a[n][i]=m++;
}
// 输出最右侧的列
for(j=n+1;j<num-n;j++)
{
a[j][num-n-1]=m++;
}
// 输出最底部的行
for(i=num-n-2;i>=n;i--)
{
a[num-n-1][i]=m++;
}
// 输出最左侧的列
for(j=num-n-2;j>=n+1;j--)
{
a[j][n]=m++;
}
n++;
if(n<=num/2)
{
funArray(a,num);
}
}
void printArray(int a[N][N],int num)
{
int i,j;
for(i=0;i<num;i++){
for(j=0;j<num;j++){
printf("%4d",a[i][j]);
}
printf("\n");
}
}
int main(int argc, const char * argv[]) {
{
int a[N][N]={0};
int num=scanNum();
funArray(a,num);
printArray(a,num);
return 0;
}

当输入6时的运行结果:

扩展阅读

Jackson wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
如果你觉得我的文章还不错,欢迎打赏~