码迷,mamicode.com
首页 > 编程语言 > 详细

nyoj 852 蛇形填数(二)【循环+数组】

时间:2015-08-31 17:23:15      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

蛇形填数(二)

时间限制:2000 ms  |  内存限制:65535 KB
难度:3
描述
1  2  3  4  5
12 13 14 6
11 15 7
10 8
9
跟蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开
输入
第一行有一个N,表示N组测试数据
接下来每组数据包括一个数字X,表示三角形的边长,0< X <1000
输出
输出之后填好之后的图
样例输入
2
5
4
样例输出
1  2  3  4  5
12 13 14 6
11 15 7
10 8
9

1  2  3  4
9  10 5
8  6
7
来源
NBOJ
上传者
勿念情

思路:

        通过while语句来控制走向(右,左下,上),然后每走一步变量t加1,最终给定范围的每一个方格都填满对应的数为止!

代码:

#include <stdio.h>
#include <string.h>
int a[1005][1005];
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		memset(a,0,sizeof(a));
		int n;
		scanf("%d",&n);
		int x=0,y=0,t=1;
		a[0][0]=1;
		int u=n*(n+1)/2;
		int i,j;
		while(t<u)//在小于位数的情况下才执行下面语句! 
		{
			while(y+1<n-x&&!a[x][y+1])//右 
			        a[x][++y]=++t;//因为列数发生了变化,所以不是n,而是n-x(与行号有关) 
			while(y-1>=0&&x+1<n&&!a[x+1][y-1])//左下
			{
				a[++x][--y]=++t;//向左下移动的时候要。保证列数大于等于0,行数小于n! 
			}  
			while(x-1>=0&&!a[x-1][y]) //上
			        a[--x][y]=++t;//向上移动的时候,要保证行数不小于0! 
        }
            for(int i=0;i<n;i++)
            {
			for(int j=0;j<n-i-1;j++)
			{
				printf("%d ",a[i][j]);
			}
			printf("%d\n",a[i][n-i-1]);
		}
	}
	return 0;
}



 

版权声明:本文为博主原创文章,未经博主允许不得转载。

nyoj 852 蛇形填数(二)【循环+数组】

标签:

原文地址:http://blog.csdn.net/dxx_111/article/details/48136009

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!