写一个蛇型数列

 

 

//写一个蛇型二维数组
/*
  1   2   3    4    5  6
  20 21 22 23 24  7
  19 32 33 34 25  8
  18 31 36 35 26  9
  17 30 29 28 27 10
  16 15 14 13 12 11

	//写一个蛇型数组
/*
  1  2  3  4  5  6
  20 21 22 23 24 7
  19 32 33 34 25 8
  18 31 36 35 26 9
  17 30 29 28 27 10
  16 15 14 13 12 11
 */
//书写思路: 利用二维数组,一圈是四个边,仅需要记录每个边的起始坐标,和终点坐标,就可以用循环分别遍历四条边,进行赋值。
//代码逻辑:
#include<stdio.h>
#define N 6   //定义一个六行六列的数组
int main()
{
	int arr[N][N] = {0};//定义一个二维行列式
	int x1 = 0, y1 = 0;//起点坐标
	int x2 = 0, y2 = 0;//终点坐标
	int num = 1;//起始数 1-36  /6*6=36     //一共三圈
	int n = 0;//表示表示每一圈起始的坐标点 第一圈0,0,第二圈1,1,第三圈2.2
	//上边设置代码:
	while (1)
	{
		x1 = n, y1 = n;//起点坐标0.0
	    x2 = x1, y2 = N - 1 - n;//终点坐标N是数组行数,比如第一行结束;(0,6-1-0)坐标(0,5)
	//设置上行
		int i = x1, j = y1;
		for (j = y1; j <= y2; j++)//注意:表达式3完了后j++为6
        arr[x1][j] = num++;//i是x1行不变,j向左随着num自增
		//右边设置代码  6往下为7
		//起点坐标
		x1 = n + 1, y1 = j - 1;   //也就是坐标(1,6-1)==(1,5)也就是7的坐标
		x2 = N - 1 - n, y2 = y1;//终点坐标
		for (i = x1; i <= x2; i++)
		arr[i][y1] = num++;//保持列不变,让行随num自增

		//底边//同理      结束时上面有x1=i=6(表达式3中i++已经执行了)
		x1 = j - 1, y1 = y1 - 1;  //运用码的相似性很快写出12的坐标(6-1,5-1)=(5,4)
		x2 = x1, y2 = n;
		for (j = y1; j >= y2; j--)
		arr[x1][j] = num++;
		//左
		x1 = x1 - 1, y1 = n;
		x2 = n + 1, y2 = y1;//规律取决于n
		for (i = x1; i >= x2; i--)
		arr[i][y1] = num++;


		if (num > N * N) break;//用num<36循环来限制循环
		n++;
	}

	int i, j;
	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
		printf(" %3d", arr[i][j]);//设置多次打印
		putchar('\n');//每一行换行,注意这是一个字符要用''号
	}
	return 0;		
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值