螺旋队列


// 螺旋队列问题
//1为原点,坐标为(0,0),以此点为中心顺时针旋转~~~~

#include "stdafx.h"
#include <iostream>
#include <stdio.h>

using namespace std;

void output(int pos_x, int pos_y);

int _tmain(int argc, _TCHAR* argv[])
{
	int pos_x = 0;
	int pos_y = 0;

	for(pos_y = -2; pos_y <= 2; pos_y++)
	{
		for(pos_x = -2; pos_x <= 2; pos_x++)
		{
			//scanf("%d%d", &pos_x, &pos_y);
			output(pos_x, pos_y);
		}
		printf("\n");
	}

	getchar();
	getchar();
	return 0;
}

void output(int pos_x, int pos_y)
{

	int level = max(abs(pos_x), abs(pos_y)); //该点所在的层数
	int temp = 2 * level - 1;
	int y_right = temp * temp + level; //右边一列的中间的点
	int x_down = temp * temp + 3 * level;
	int y_left = temp * temp + 5 * level;
	int x_up = temp * temp + 7 * level;

	int value = 1;
	if(-pos_y == level)//上(x轴是变化的,y是不变的。层数与y有关系)
		value = x_up + pos_x; 
	else if(-pos_x == level) //左
		value = y_left - pos_y;
	else if(pos_y == level) //下
		value = x_down - pos_x;
	else
		value = y_right + pos_y;

	printf("%d ",value);

}








// 打印出一个NxN的矩阵
//从首坐标开始顺时针依次增大
#include "stdafx.h"
#include <stdio.h>
#include <string.h>

#define N  5

void output(int a[N][N])
{
	int loop = 0; //用来控制圈数
	int value = 1; //某个位置上的数值,从1开始依次递增

	for(loop = 0; loop < N / 2; loop++)
	{
		//第一个for循环控制上边一列
		for(int up = 0; up < N - loop; up++)
		{
			if(a[loop][up] == 0) //四条边相交的地方会重复
				a[loop][up] = value++;
		}

		//顺时针。右边一列。列固定。行改变。
		for(int rt = loop + 1; rt < N - loop; rt++)
		{
			if(a[rt][N - loop - 1] == 0)
				a[rt][N - loop -1] = value++;
		}

		//下边一列。行不变。列改变
		for(int down = N - loop - 1; down >= loop; down--)
		{
			if(a[N -loop - 1][down] == 0)
				a[N -loop - 1][down] = value++;
		}

		//左边一列。
		for(int lf = N - loop -1; lf > loop; lf--)
		{
			if(a[lf][loop] == 0)
				a[lf][loop] = value++;
		}
	}

	if(0 != N / 2) //中间会多一个元素
		a[N / 2][N / 2] = N * N;

	//output
	for(int i = 0; i < N; i++)
	{
		for(int j = 0; j < N; j++)
		{
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	int a[N][N];
	//memset(a, 0, sizeof(a));

	for(int i = 0; i < N; i++)
	{
		for(int j = 0; j < N; j++)
		{
			a[i][j] = 0;
		}
	}
	output(a);

	getchar();
	return 0;
}



ps:

第一次写成了    void output(int a[N][N], int  N)   睡觉   太挫了。。。。还没看出来。。。哎


二维数组初始化为全0  : 

memset(a, 0, sizeof(a)); 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值