(解题报告)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,巧妙运用逻辑短路(否则程序很容易出现越界访问),以后遇到这种题目一律采用先判断再访问的方法。
具体代码如下:
仅代表个人观点!
描述
在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; }
仅代表个人观点!
相关文章推荐
- XMLDLL操作说明文档(二)
- matlab从图片中简单识别红色物体
- JAVA 多态和异常处理作业——动手动脑以及课后实验性问题
- zoj 3870
- dancing links解决X问题的C++实现
- 团队作业--冲刺总结
- 关于SQL Server中分区表的文件与文件组的删除(转)
- 区域赛系列一多边形划分(卡特兰数)
- js与java的冒泡排序
- 杭电1247
- 菜鸟如何成为一个高效程序员的成长之路
- 常见的JS排序算法
- 黑马程序员——Java集合框架复习总结(三)
- [BZOJ4034] [HAOI2015]T2
- 日经春秋 20151113
- 大道至简第7,8章读后感
- 明天可以自动签到啦!!!
- 去掉 input type="number" 右边图标
- HDU 5115 Dire Wolf(区间DP)
- acm进阶