GEEKプログラミング練習——螺旋行列


今日から、できるだけ毎日1本の実戦のプログラミングの問題、テーマの新旧にかかわらず、いつもあなたのプログラミングの基本的な仕事と思考を考察することができます.
タイトル
今日のテーマは1本の螺旋行列のテーマで、ある人は回型行列、蛇形行列などとも呼ばれていますが、実はすべて蛇形行列には別の様式があります.自分で娘~テーマの内容は正の整数nを入力して、次のような螺旋行列n=1の螺旋行列1を出力してください.
n=2の螺旋行列1 2 4 3
n=3の螺旋行列1 2 3 8 9 4 6
n=4の螺旋行列1 2 3 4 12 13 14 5 11 16 16 6 10 8
ぶんせき
n=4を栗とし、一番外側の層を左から1、2、3、それから上から下へ4、5、6、それから右から左へ7、8、9、最後に下から上へ10、11、12、それからこの法則に従って内層循環を行う法則が見られる.では,各層を方向別に4つのグループに分け,各グループにそれぞれ付与することができる.特にnが奇数の場合、最内層は値であり、付与することができる.具体的なコードは以下の通りです.
コード#コード#
//Helix Matrix
//Date : 2016-04-03
//Author :Sin_Geek

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n;
    cin >> n; //       

    //  n*n  
    vector<vector<int>> a(n, vector<int>(n));

    //l      ,k          
    int k,l = 0;

    //  n      ,         
    if (n%2)
        a[n/2][n/2] = n*n;

    //            
    for (int i = 0; i < n * 2 - n % 2; ++i)
    {
        k = i/4;
        //          
        for(int j = 0; j < n - 2 * k -1; ++j)
        {
            ++l;
            switch(i%4)
            {
                case 0://  
                    a[k][j + k] = l;
                    break;
                case 1://  
                    a[j + k][n - 1 - k] = l;
                    break;
                case 2://  
                    a[n - 1 - k][n - 1 - j - k] = l;
                    break;
                case 3://  
                    a[n - 1 - j - k][k] = l;
                    break;
            }
        }
    }

    //        
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
           cout << a[i][j] << ends;
        }
        cout << endl;
    }

    return 0;
}