在 n 阶方阵填入1 ,2 ,3 ,.... , n*n ,要求填成蛇形。例如, n = 4 时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
代码如下
#include<iostream>
using namespace std;
#define maxn 8
int num[maxn][maxn] = {0}; // 创建一个二维数组,并初始化
int main()
{
int n; //确定 n 阶方阵
while (cin>>n)
{
int j = 1;
int l = n;
int k = n/2; //方阵的环数 (不包括 迹 为奇数的方阵的中间那个数字)
while (k)
{
for (int i = n-l; i < l-1; i++) //赋值
num[i][l-1] = j++;
for (int i = l-1; i > n-l; i--)
num[l-1][i] = j++;
for (int i = l-1; i > n-l; i--)
num[i][n-l] = j++;
for (int i = n-l; i < l-1; i++)
num[n-l][i] = j++;
l = l-1; // 使方阵环内缩(即环向中心靠拢)
k--; // 限制环数,防止重复
}
if (n % 2 == 1) //如果迹为奇数,确定方阵中心的数字
num[n/2][n/2] = j;
for (int i = 0; i < n; i++) //输出
{
for (int j = 0; j < n; j++)
printf("%3d",num[i][j]);
cout<<endl;
}
}
return 0;
}