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

蛇形填数(二)

时间限制: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;
}

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

时间: 2024-10-10 12:28:38

nyoj 852 蛇形填数(二)【循环+数组】的相关文章

nyoj 33 蛇形填数【循环+数组】

蛇形填数 时间限制: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 来源 算法经典 上传者 首席执行官 思路: 通过while循环来控制走向(下,左,上,右),并将每一步的结果(结果

NYOJ 852 蛇形填数(二)

#include<stdio.h>int t=0,num,x,y,tot=0,n,i,j,sum=0;#include<string.h>#define max 1001int a[max][max];int main(){ scanf("%d",&num); while(num--) { scanf("%d",&n); for(i=1;i<=n;i++) sum=sum+i; memset(a,0,sizeof(a))

nyoj 33 蛇形填数

蛇形填数 时间限制: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 1 #include <iostream> 2 using namespace s

NYOJ蛇形填数(二)

蛇形填数(二) 时间限制: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

&lt;蛇形填数&gt;--算法竞赛 入门经典(第2版)- 3.1 数组 程序3-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 <= 8 . 类比上面这种数学中的矩阵,我们可以考虑使用一个二维数组来储存. 解题思路:从右上角开始往下填数,当到底的时候转向左填值,当到左边的边的时候转向上填数,当到最上面的时候转向右填值...依次类推.第一轮转圈

NYOJ33 蛇形填数

一.原题 在n*n方阵里填入1,2,...,n*n.要求填成蛇形.例如n=4时方阵为: 10  11  12  1 9  16  13  2 8  15  14  3 7    6    5  4 (题目来源:<算法竞赛入门经典>[刘汝佳]) 二.题目源代码 #include <stdio.h> #include <string.h> #define MAXN 10 int a[MAXN][MAXN]; int main() { int n,x,y,tot=0; sca

&lt;蛇形填数&gt;--算法竞赛 入门经典(第2版) 程序3-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 <= 8 . 类比上面这种数学中的矩阵,我们可以考虑使用一个二维数组来储存. 解题思路:从右上角开始往下填数,当到底的时候转向左填值,当到左边的边的时候转向上填数,当到最上面的时候转向右填值...依次类推.第一轮转圈的判断

python版蛇形填数

引 入 蛇形填数,一道经典有趣的算法入门题.这里用python来实现. 代码 vim snake.py #!/usr/bin/env python #-*- coding: utf-8 -*- #矩阵初始化函数 def genMatrix(rows,cols):       #用二维数组来代表矩阵     matrix = [[0 for col in range(cols)] for row in range(rows)]       for i in range(rows):        

3-3 蛇形填数

在n*n方阵里填入1,2,...,n*n,要求填成蛇形,例如n=4时方阵为:10 11 12 19 16 13 28 15 14 37 6 5 4上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出.n≤8.分析: 定义一个二维数组存储方阵,先是下,到不能填为止,然后是左,接着是上,最后是右. 代码: #include<stdio.h> #include<string.h> #define MAXN 10 int a[MAXN][MAXN]; int main() { int