按上-右-下-左一圈再一圈的顺序给二维数组赋值,每次处理完一条边后要改变边界值的大小。最后打印
#include <stdio.h> int main(){ int n = 0, arr[20][20]; scanf("%d\n", &n); int left = 0, right = n-1, up = 0, down = n-1; //左右上下起始边界 int i = 0, j = 0, val = 1; //val是数值 while(val <= n * n){ for(i = left; i <= right; i++) //最上面一行 arr[up][i] = val++; //列号向右逐渐增大 up++; //上边界向下加1 for(i = up; i <= down; i++) //最右边一列 arr[i][right] = val++; //行号逐渐向下增大 right--; //右边界向左减1 for(i = right; i >= left; i--) //最下边一行 arr[down][i] = val++; //列号向左逐渐减少 down--; //下边界向上减1 for(i = down; i >= up; i--) //最左边一列 arr[i][left] = val++; //行号向上逐渐减小 left++; //左边界向右加1 } for(i = 0; i < n; i++){ for(j = 0; j < n; j++) printf("%d ", arr[i][j]); //用萝卜填坑 printf("\n"); } return 0; }