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
void luoxuan(){
int arr[len][len];
//开始初始化,给数组赋值0
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
arr[i][j] = 0;
}
}
arr[0][0] = 1; //顶角确定了,我们可以算出第一行右边的数字
int circleTimes = len/2 + 1;
int circelIndex = 0; //圈的数量
//赋值过程
while(circleTimes>0){ //测试时候,每一圈结束可以打印出看一下:&& circelIndex <1
circelIndex ++;
printf("第%d圈\n",circelIndex);
for(int column = 1;column <= len-circelIndex; column++){ //往右排列
if(column >= circelIndex-1){
arr[circelIndex-1][column] = arr[circelIndex -1][column-1] + 1;
}
}
for(int row = circelIndex; row<= len-circelIndex; row++){ //往下排列,从第二行,第X-i 列开始
arr[row][len-circelIndex] = arr[row-1][len-circelIndex] + 1;
}
for(int column = len-circelIndex-1; column >= circelIndex-1; column--){ //往左排,下标递减1,值为后一个 + 1
arr[len-circelIndex][column] = arr[len-circelIndex][column+1] + 1;
}
for(int row =len-circelIndex-1; row > circelIndex-1; row--){ //往上排列
arr[row][circelIndex-1] = arr[row+1][circelIndex-1] + 1;
}
circleTimes--;
}
//输出二维数组
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
printf("%d\t",arr[i][j]);
}
printf("\n\n");
}
}