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循环来控制走向(下,左,上,右),并将每一步的结果(结果从1开始)保存到数组a中,然后再统一的输出结果!

代码:

#include <stdio.h>
#include <string.h>
int a[105][105];
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		memset(a,0,sizeof(a));
		int x=0,y=n-1,t=1;
		a[x][y]=1;
		while(t<n*n)
		{
		while(x+1<n&&!a[x+1][y])  a[++x][y]=++t;//先判断接下来这一个数是否符合条件,如果符合条件,就进行赋值!
		while(y-1>=0&&!a[x][y-1]) a[x][--y]=++t;
		while(x-1>=0&&!a[x-1][y]) a[--x][y]=++t;
		while(y+1<n&&!a[x][y+1])  a[x][++y]=++t;
	    }
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n-1;j++)
			{
				printf("%d ",a[i][j]);
			}
			printf("%d\n",a[i][n-1]);
		}
	}
	return 0;
}

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

时间: 2024-10-07 17:20:54

nyoj 33 蛇形填数【循环+数组】的相关文章

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

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

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

&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 . 类比上面这种数学中的矩阵,我们可以考虑使用一个二维数组来储存. 解题思路:从右上角开始往下填数,当到底的时候转向左填值,当到左边的边的时候转向上填数,当到最上面的时候转向右填值...依次类推.第一轮转圈

&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 . 类比上面这种数学中的矩阵,我们可以考虑使用一个二维数组来储存. 解题思路:从右上角开始往下填数,当到底的时候转向左填值,当到左边的边的时候转向上填数,当到最上面的时候转向右填值...依次类推.第一轮转圈的判断

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蛇形填数(二)

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

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

【基础题】蛇形填数

题目描述 在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 先说一下我的思路,我把n=4时的情况列了出来,发现了奇数时,j变化,偶数时,i变化等变化规律,后来我发现需要总结很多变化规律才能算数来,总结出了n=4的,n=5时又不一样了,哎,头疼(小白的思