时间限制: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
细心的朋友可以发现一个特点,
要填 数,其实就是一圈一圈的填 数,
一圈就是4个循环,分别处理右列,下行,左列,上行。
好像是一个漩涡似的。
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
#define MAX_SIZE 100
int main()
{
int n;
cin >> n;//n * n方阵
int pn[MAX_SIZE][MAX_SIZE];
int row =-1, col = n-1;
memset(pn, 0, sizeof(pn));
int count = 1;
while (count <= n * n)
{
while (row < n-1 && pn[row+1][col] == 0) pn[++row][col] = count++;
while (col >= 1 && pn[row][col-1] == 0) pn[row][--col] = count++;
while (row >= 1 && pn[row-1][col] == 0) pn[--row][col] = count++;
while (col < n-1 && pn[row][col+1] == 0) pn[row][++col] = count++;
//cout <<"count=" << count << endl;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << pn[i][j] << " ";
cout << endl;
}
return 0;
}