// 螺旋队列问题
//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));