题目链接
分析思路
我采用的设计思路是从外围开始向里面赋值,关键在于循环的判断条件,从外围的上下左右行依次赋值,然后再向里继续。
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;
}
运行结果