题目:

解题思路:
重点要知道数组的边界点,然后按上右下左循环输入,没输入完一边,对应边的临界值就要相应的加1或减1,比如最上边输入完值后,top就要减一,最右边输入完值后,right就要减一,以此类推。最后循环遍历打印输出。

算法代码实现:
#include <stdio.h>
#define ARR_MAX 19
int main()
{
int n = 0;
scanf("%d", &n);
int arr[ARR_MAX][ARR_MAX] = { 0 };
//定义数组边界临界值
int top = 0, left = 0, right = n - 1, down = n - 1;
//从1开始输入
int x = 1;
//循环输入
while (x <= n * n) //循环条件为不大于n*n,比如为n为4,则不大于16
{
//top
for (int i = left; i <= right; i++)
{
arr[top][i] = x++;
}
top++;
//right
for (int i = top; i <= down; i++)
{
arr[i][right] = x++;
}
right--;
//down
for (int i = right; i >= left; i--)
{
arr[down][i] = x++;
}
down--;
//left
for (int i = down; i >= top; i--)
{
arr[i][left] = x++;
}
left++;
}
//循环遍历打印输出
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
&spm=1001.2101.3001.5002&articleId=149182118&d=1&t=3&u=87b06cf0e0434b19a28de29fc6577f5b)
640

被折叠的 条评论
为什么被折叠?



