蛇形填数

在 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;
 }

原文地址:https://www.cnblogs.com/go-alltheway/p/13345616.html