您的位置:首页 > 其它

(解题报告)NOJ1094--蛇形填数1

2015-11-13 22:20 239 查看
noj1094-蛇形填数

描述

在n×n方阵里填入1,2,…, n×n,要求填成蛇形(见样例)。

输入

输入正整数n,n≤64。

输出

输出蛇形矩阵,要求每个数格式宽度为5、右对齐。

样例输入

4

样例输出

10 11 12 1

9 16 13 2

8 15 14 3

7 6 5 4

解题思路:

典型到不能更典型的模拟题:

1.什么叫模拟,简单来说就是题目怎么说我就怎么做,结果先保存在数组中,最后输出。

首先我先让第一行的第n列为1,

然后一直向下,让这一列的值为分别为2,3,n,然后向左,然后向上,然后向右。

这里有几个注意点:

1,这里有两个判断条件,首先是是否达到数组边界,其次是是否继续往前,具体见代码.

2,关于循环次数的理解。

3,巧妙运用逻辑短路(否则程序很容易出现越界访问),以后遇到这种题目一律采用先判断再访问的方法。

具体代码如下:

#include <stdio.h>
#include <string.h>
int main()
{

int a[65][65];
int i,j,x,y,n,total;//x,y分别是横坐标,纵坐标,total是当前画到第几个数了
memset(a,0,sizeof(a));//对数组清零
scanf("%d",&n);
x=1;//给各个变量初始化
y=n;
a[x][y]=1;//注意一定要赋值起始点为1
total=1;
while(total<n*n)//最后一定是n*n,我希望当total为n*n时跳出循环
{
while((x+1<=n)&&(!a[x+1][y]))//能否调换顺序
a[++x][y]=++total;//注意先加加!
while((y-1>=1)&&(!a[x][y-1]))
a[x][--y]=++total;
while((x-1>=1)&&(!a[x-1][y]))
a[--x][y]=++total;
while((y+1<=n)&&(!a[x][y+1]))
a[x][++y]=++total;
}
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}


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