蛇形填数
时间限制:
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 <cstdio>
#include <iostream>
using namespace std;
int main()
{
int i,j,k=1;
int x;
int a[100][100]={0}; //初始化为0,为了判断是否为第一次操作该下标对应元素,不加一定不对
cin>>x;
i=0,j=x-1;
int n=x*x;
a[i][j]=k; //从数组右上角开始
while(n--)
{
while(i<x-1&&!a[i+1][j]) //下标下移,并判断下移后的数组元素是非为0
a[++i][j]=++k;
while(j>0&&!a[i][j-1]) //下标左移,并判断左移后的数组元素是否为0
a[i][--j]=++k;
while(i>0&&!a[i-1][j]) //下标上移,并判断上移后的数组元素是否为0
a[--i][j]=++k;
while(j<x-1&&!a[i][j+1]) //下标右移,并判断右移后的数组元素是否为0
a[i][++j]=++k;
}
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}
//每天比昨天更好一些