我采用的设计思路是从外围开始向里面赋值,关键在于循环的判断条件,从外围的上下左右行依次赋值,然后再向里继续。
1.取得中心值的方法是:用n/2再向上取整,注意类型的转换,因为如果是整数的除法运算,会默认抛弃后面的小数部分,再取整的话,得到的还是n/2。
2.边界条件x,y同时向内递增和递减,到中心时会发现它们相等。
- #define _CRT_SECURE_NO_WARNINGS 1
- #include<stdio.h>
- #include<math.h>
-
- int main()
- {
- int n;
- int matrix[10][10];
- scanf("%d", &n);
- int inner = ceil((float)n / 2.0);
- //数组初始化
- int i = 0;
- int j = 0;
- for (i = 0; i < 10; i++)
- {
- for (j = 0; j < 10; j++)
- {
- matrix[i][j] = 0;
- }
- }
-
-
- //开始赋值
- //定义矩阵边界
- int x = 0;
- int y = n;
-
- //定义所赋值的数num
- int num = 1;
-
- while (num <= inner)
- {
- for (i = x; i < n; i++)
- {
- for (j = x; j < n; j++)
- {
- if (i == x || j == x || i == y - 1 || j == y - 1)
- {
- if (matrix[i][j] == 0)
- {
- matrix[i][j] = num;
- }
- }
- }
- }
- x++;
- y--;
- num++;
- }
-
- //输出
-
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- {
- printf("%d", matrix[i][j]);
- if (j != n - 1) printf(" ");
- }
- printf("\n");
- }
- return 0;
- }
运行结果
