您的位置:首页 > 运维架构

蛇形填充数组

2016-07-13 23:17 337 查看


总时间限制: 
1000ms 
内存限制: 
65536kB

描述

用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。

蛇形填充方法为:

对于每一条左下-右上的斜线,从左上到右下依次编号1,2,...,2n-1;按编号从小到大的顺序,将数字从小到大填入各条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。

比如n=4时,方阵填充为如下形式:
1  2  6  7
3  5  8  13
4  9  12 14
10 11 15 16


输入输入一个不大于10的正整数n,表示方阵的行数。
输出输出该方阵,相邻两个元素之间用单个空格间隔。
样例输入
4


样例输出
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16


#include<stdlib.h>
#include<stdio.h>

int A[100][100];
int row = 0, cro = 0;//当前位置
int mark = 1;//偶数向上,奇数向下

void que(int n)
{
int j = n*n;
for (int i = 1; i <=j; i++)
{
if (mark % 2 == 1)//奇数向上
{
if (row < 0 && cro>0 && cro < n)//上边出界
{
row = 0;
A[row][cro] = i;
mark++;
row += 1;
cro -= 1;
}
else if (row < 0 && cro >= n)//右上顶点出界
{
row = 1;
cro = n - 1;
A[row][cro] = i;
mark++;
row += 1;
cro -= 1;
}
else if(row >= 0 && row < n-1&&cro >= n)//右边出界
{
row += 2;
cro = n - 1;
A[row][cro] = i;
mark++;
row += 1;
cro -= 1;
}
else                    //无出界
{
A[row][cro] = i;
row -= 1;
cro += 1;
}

}
else                      //偶数向下
{
if (row > 0 && row < n&&cro < 0)//左边出界
{
cro = 0;
A[row][cro] = i;
mark++;
row -= 1;
cro += 1;
}
else if (row >= n&&cro < 0)//左下顶点出界
{
row = n - 1;
cro = 1;
A[row][cro] = i;
mark++;
row -= 1;
cro += 1;
}
else if (row >= n&&cro >= 0 && cro < n - 1)//下边出界
{
row = n - 1;
cro += 2;
A[row][cro] = i;
mark++;
row -= 1;
cro += 1;
}
else                   //无出界
{
A[row][cro] = i;
row += 1;
cro -= 1;
}

}
}
}

void main()
{
int n;
scanf("%d", &n);

que(n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", A[i][j]);
}
printf("\n");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  OPJ