码迷,mamicode.com
首页 > 其他好文 > 详细

蛇形填数

时间:2017-05-02 11:48:48      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:div   stdio.h   style   定义   include   main   数据   这一   can   

??
蛇形填数:

描写叙述
在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

上代码:

#include<stdio.h>
int N[100][100];//定义全局二维数组,存储数据
int count = 1;//count 记录每次填进数组的数字
//填数函数,參数分别为:数组的行号,列号,開始填入的数字(从1開始),数组的大小
void sxts(int k,int h,int count,int size)
{
	if(size == 0)//数组大小为 0 * 0 ,即没有要填的,直接返回
		return ;
	if(size == 1)//数组为数组大小为1 * 1,仅仅需填入一个数
	{
		N[h][k] = count;
		return ;
	}
	int i  = 0; 
	N[h][k] = count;//填右上角的位置 1;
	count ++;//数字加1为下一次填数准备
	//填最外层的右边一竖列(相当于size = 3 时 的 2 3)
	//此列规律为:列号不变,行号依次添加
	for(i = 0; i < size - 1; i ++)
	{
		h ++;//行号添加
		N[h][k] = count;//填入数字
		count ++;//为下一次填数准备
	}
	//填最外一层的下边(相当于size = 3 时 的 4 5)
	//此行的规律为:行号不变,列号依次递减
	for(i = 0; i < size -1; i ++)
	{
		k --;
		N[h][k] = count;
		count ++;
	}
	//填最外一层的左边一竖列(相当于size = 3 时 的 6 7)
	//此行的规律为:列号不变。行号号依次递减
	for(i = 0; i < size - 1; i ++)
	{
		h --;
		N[h][k] = count;
		count ++;
	}
	//填最外一层的上边一行(相当于size = 3 时 的 8)
	//此行的规律为:列号不变,行号号依次递减,可是注意在填这一行时循环应该为size - 2次,由于此行的最左边和最右边的均被填过
	for(i = 0; i < size - 2; i ++)
	{
		k ++;
		N[h][k] = count;
		count ++;
	}
	//递归调用,填下一层
	sxts(k,h + 1,count,size - 2);
}
int main()
{
	int h,k,n,i,j;
	scanf("%d",&n);
	k = n - 1; h = 0;
	sxts(k,h,count,n);
	//打印出数组
	for(i = 0; i < n; i ++)
	{
		for(j = 0; j < n; j ++)
			printf("%d ",N[i][j]);
		printf("\n");
	}
	return 0;
}

蛇形填数

标签:div   stdio.h   style   定义   include   main   数据   这一   can   

原文地址:http://www.cnblogs.com/zsychanpin/p/6795105.html

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