NYOJ-33-蛇形填数

蛇形填数

时间限制: 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
 
    
n = 3 时
规律:

A[0][2] = 1;

A[1][2] = 2;

A[2][3] = 3’

A[2][1] = 4;

A[2][0] = 5;

A[1][0] = 6;

A[0][0] = 7;

A[0][1] = 8;

A[1][1] = 9

同理 n = 4;

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    int n, a[100][100], ans = 1;
    cin >> n;
    memset(a, 0, sizeof(a));
    int i = 0, j = n - 1, max = n*n;
    a[i][j] = 1;
    while(ans < max)
    {

        while(i+1 < n&& a[i+1][j] == 0)
            a[i++][j] = ans++;
        while(j-1 >= 0 && a[i][j-1] == 0)
            a[i][j--] = ans++;
        while(i-1 >= 0 && a[i-1][j] == 0)
            a[i--][j] = ans++;
        while(j+1 < n && a[i][j+1] == 0)
            a[i][j++] = ans++;
    }

    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
        {
            if(a[i][j] == 0)
                cout << n*n << " ";
            else
                cout << a[i][j] <<" ";
        }
        cout << endl;
    }
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值