1 输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限
2
3 比如:
4
5 输入:5 18
6
7 输出:
8
9 1 2 3 4 5
10
11 16 17 18 0 6
12
13 15 0 0 0 7
14
15 14 0 0 0 8
16
17 13 12 11 10 9
18
19
20
21 输入: 4 12
22
23 输出:
24
25 1 2 3 4
26
27 12 0 0 5
28
29 11 0 0 6
30
31 10 9 8 7
32
33 #include<stdio.h>
34
35 int main(void)
36 {
37 int n,m,i,j,temp;
38 int dir = 0; //0向右,1向下,2向左,3向上,
39 scanf("%d%d",&m,&n);
40 int arr[m][m];
41
42 //对数组初始化 arr[m][m] = {0}编译不通过
43 for(i=0; i<m; i++)
44 {
45 for(j=0; j<m; j++)
46 {
47 arr[i][j] = 0;
48 }
49 }
50
51 i = j = 0;
52 temp = 1;
53 while(temp <= m*m)
54 {
55 if(temp > n)break;
56 arr[i][j] = temp;
57 switch(dir)
58 {
59 case 0:
60 {
61 if(j+1 == m || arr[i][j+1] > 0)
62 {
63 i++;
64 dir = 1;
65 }
66 else j++; break;
67 }
68 case 1:
69 {
70 if(i+1 == m || arr[i+1][j] > 0)
71 {
72 j--;
73 dir = 2;
74 }
75 else i++; break;
76 }
77 case 2:
78 {
79 if(j - 1 < 0 || arr[i][j-1] > 0)
80 {
81 i--;
82 dir = 3;
83 }
84 else j--; break;
85 }
86 case 3:
87 {
88 if(arr[i-1][j] > 0)
89 {
90 j++;
91 dir = 0;
92 }
93 else i--; break;
94 }
95 }
96 temp++;
97 }
98
99 //打印数组
100 for(i=0; i<m; i++)
101 {
102 for(j=0; j<m; j++)
103 {
104 printf("%3d",arr[i][j]);
105 }
106 printf("
");
107 }
108 return 0;
109 }