69,371
社区成员
发帖
与我相关
我的任务
分享
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
#include <stdio.h>
#define M 50
void main()
{
int i,j,n,count;
int dada[M][M] = {0};
printf("Input n(0~%d):",M);
scanf("%d",&n);
count = 1;
for(i=0;i<(n+1)/2;i++)
{
for (j=i;j<n-i;j++)
{
dada[i][j] = count++;
}
for (j=i+1;j<n-i;j++)
{
dada[j][n-i-1] = count++;
}
for (j=n-i-2;j>=i;j--)
{
dada[n-i-1][j] = count++;
}
for (j=n-i-2;j>i;j--)
{
dada[j][i] = count++;
}
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
printf("%5d",dada[i][j]);
}
printf("\n\n");
}
}
#include <stdio.h>
int main(int argc, char **argv)
{
/* 矩阵(外面加一层墙) */
enum {N = 6};
int matrix[N + 2][N + 2] = {0};
/* 当前位置的四个方向的偏移 */
enum {RIGHT, DOWN, LEFT, UP};
int off_x[4] = {1, 0, -1, 0};
int off_y[4] = {0, +1, 0, -1};
/* 当前位置(初始化为第一个点的左边) */
int x = 0, y = 1;
/* 方向初始化为向右 */
int direct = RIGHT;
int i, k;
/* 初始化外围的墙 */
for (i = 0; i < N + 2; ++i)
{
matrix[0][i] = 1;
matrix[N + 1][i] = 1;
matrix[i][0] = 1;
matrix[i][N + 1] = 1;
}
/* 开始填充 */
for (i = 0; i < N * N; ++i)
{
x += off_x[direct];
y += off_y[direct];
matrix[y][x] = i + 1;
/* 这个方向已经走不通的时候设置下一个方向(有墙的好处是不用判断是否越界了) */
if (0 != matrix[y + off_y[direct]][x + off_x[direct]])
{
direct = (direct + 1) % 4;
}
}
/* 打印 */
for (i = 0; i < N; ++i)
{
for (k = 0; k < N; ++k)
printf("%d\t", matrix[i + 1][k + 1]);
putchar('\n');
}
return 0;
}
/*
N = 6时候的输出:
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
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
*/
#include <stdio.h>
int main(int argc, char **argv)
{
/* 矩阵 */
enum {N = 4};
int matrix[N][N] = {0};
/* 当前位置的四个方向的偏移 */
enum {RIGHT, DOWN, LEFT, UP};
int off_x[4] = {1, 0, -1, 0};
int off_y[4] = {0, +1, 0, -1};
/* 当前位置(初始化为第一个点的左边) */
int x = -1, y = 0;
/* 方向初始化为向右 */
int direct = RIGHT;
int i, k;
/* 开始填充 */
for (i = 0; i < N * N; ++i)
{
x += off_x[direct];
y += off_y[direct];
matrix[y][x] = i + 1;
/* 这个方向已经走不通的时候设置下一个方向 */
if (x + off_x[direct] < 0 || x + off_x[direct] >= N ||
y + off_y[direct] < 0 || y + off_y[direct] >= N ||
0 != matrix[y + off_y[direct]][x + off_x[direct]])
{
direct = (direct + 1) % 4;
}
}
/* 打印 */
for (i = 0; i < N; ++i)
{
for (k = 0; k < N; ++k)
printf("%d\t", matrix[i][k]);
putchar('\n');
}
return 0;
}