【ACM】蛇形填数 - 逻辑怪

 

蛇形填数

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
 
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
 
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3
样例输出
7 8 1
6 9 2
5 4 3

 

 
#include <iostream>
#include <cmath>
#include <cstdio>

using namespace std;

int main(){

    int n;
    cin>>n;
    int **a = new int *[n];
    for (int i = 0; i < n ; i++)
    {
        a[i] = new int[n];
    }
    int sum = 1;
    int x = 0, y = n-1;
    int circle = 1;
    while (sum<n*n)
    {
        while (x<n-circle)    //down
        {
            a[x][y] = sum++;
            x++;
        }
        while (y>circle-1)
        {
            a[x][y] = sum++;
            y--;
        }
        while (x>circle-1)
        {
            a[x][y] = sum++;
            x--;
        }
        while (y<n-circle)
        {
            a[x][y] = sum++;
            y++;
        }
        x++;y--;
        circle++;
    }
    if (n%2!=0)
    {
        a[x][y] = n*n;
    }
    int i,j;
    for (i = 0 ; i < n ; i++)
    {
        for (j = 0 ; j < n-1; j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<a[i][j]<<endl;
    }

    return 0;
}        

 

posted @ 2018-09-14 14:38  凌雨尘  阅读(798)  评论(0编辑  收藏  举报