方阵填数题解

Go CSP-S!  •  4年前


前面提交了三次发现都没有AC,以为程序完全是错误的,不过后来在帮助这个菜单中发现那个是不完全正确的意思,再回到题目中去看的时候,才注意到输出格式的问题。后来把输出的格式调整之后,就AC了。

#include<iostream>
using namespace std;
const int N = 105;
int a[N][N]={0};
int main(){
int n,x,y,k;
cin>>n;
a[x=1][y=n] = k = 1;
while (k<n*n)

{
while (x+1<=n && !a[x+1][y]) a[++x][y]=++k;
while (y-1>=1 && !a[x][y-1]) a[x][--y]=++k;
while (x-1>=1 && !a[x-1][y]) a[--x][y]=++k;
while (y+1<=n && !a[x][y+1]) a[x][++y]=++k;
}

for (int i=1; i<=n; i++)

{
for (int j=1; j<n; j++)

printf("%2d ", a[i][j]);
printf("%2d", a[i][n]);
cout << endl;
}
return 0;
}

这个题的解题思路是:首先看清楚这个方阵的特点,然后就是二维数组下标的规律加上循环的应用了。


评论:

请先登录,才能进行评论