下面收集了几种可能的螺旋数组形式以及相应的主代码。供大家学习参考。
- 给定N的值,从矩阵的左上角输出顺时针螺旋矩阵
例如N=4时,输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
void main()
{
int i, j, k, base = 1, N;
int a[128][128] = { 1 };
scanf_s("%d", &N);
printf("\n左上角顺时针的螺旋矩阵:\n");
for (k = 0; k < N / 2; k++)
{
for (i = k; i <= N - 1 - k; i++)
a[k][i] = base++;
for (j = k + 1; j < N - 1 - k; j++)
a[j][N - 1 - k] = base++;
for (i = N - 1 - k; i > k; i--)
a[N - 1 - k][i] = base++;
for (j = N - 1 - k; j > k; j--)
a[j][k] = base++;
if (N % 2 == 1)
a[(N - 1) / 2][(N - 1) / 2] = base;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
2.给定N的值,从矩阵的右上角输出逆时针螺旋矩阵
例如N=4时,输出:
4 3 2 1
5 14 13 12
6 15 16 11
7 8 9 10
void main()
{
int i, j, k, base = 1, N;
int a[128][128] = { 1 };
scanf_s("%d", &N);
printf("\n右上角逆时针的螺旋矩阵:\n");
base = 1;
for (k = 0; k < N / 2; k++)
{
for (i = N - k - 1; i >= k ; i--)
a[k][i] = base++;
for (j = k + 1; j <= N - 1 - k; j++)
a[j][k] = base++;
for (i = k + 1 ; i < N - 1 - k; i++)
a[N - 1 - k][i] = base++;
for (j = N - 1 - k; j > k; j--)
a[j][N - 1 - k] = base++;
if (N % 2 == 1)
a[(N - 1) / 2][(N - 1) / 2] = base;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
- 给定N的值,从内到外顺时针旋转
例如N=3时,输出:
7 8 9
6 1 2
5 4 3
void main()
{
int i, j, k, base = 1, N;
int a[128][128] = { 1 };
scanf_s("%d", &N);
printf("\n从内到外逆时针的螺旋矩阵:\n");
base = N * N;
for (k = 0; k < N / 2; k++)
{
for (i = k; i <= N - 1 - k; i++)
a[k][i] = base--;
for (j = k + 1; j < N - 1 - k; j++)
a[j][N - 1 - k] = base--;
for (i = N - 1 - k; i > k; i--)
a[N - 1 - k][i] = base--;
for (j = N - 1 - k; j > k; j--)
a[j][k] = base--;
if (N % 2 == 1)
a[(N - 1) / 2][(N - 1) / 2] = 1;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
4.给定N的值,从内到外逆时针旋转
例如N=3时,输出:
5 4 3
6 1 2
7 8 9
void main()
{
int i, j, k, base = 1, N;
int a[128][128] = { 1 };
scanf_s("%d", &N);
printf("\n从内到外顺时针的螺旋矩阵:\n");
base = N * N;
for (k = 0; k < N / 2; k++)
{
for (i = N - k - 1; i >= k; i--)
a[k][i] = base--;
for (j = k + 1; j <= N - 1 - k; j++)
a[j][k] = base--;
for (i = k + 1; i < N - 1 - k; i++)
a[N - 1 - k][i] = base--;
for (j = N - 1 - k; j > k; j--)
a[j][N - 1 - k] = base--;
if (N % 2 == 1)
a[(N - 1) / 2][(N - 1) / 2] = 1;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
5.给定N的值,从矩阵的左上角顺时针输出上三角螺旋矩阵
例如N=4时,输出:
1 2 3 4
9 10 5
8 6
7
void main()
{
int i, j, k, base = 1, N;
int a[128][128] = { 1 };
scanf_s("%d", &N);
printf("\n从矩阵左上角顺时针旋转的螺旋矩阵:\n");
base = 1;
for (k = 0; k < N / 3; k++)
{
for (i = k; i < N - 1 - 2*k; i++)
a[k][i] = base++;
for (j = N - 2*k - 1 , i= k ; j >= k ; j-- , i++ )
a[i][j] = base++;
for (i = N - 2 - 2*k; i >= k + 1 ; i--)
a[i][k] = base++;
}
if (N % 3 != 0)
{
if (N % 3 == 1)
a[N / 3][N / 3] = base++;
else
{
a[N / 3][N / 3] = base++;
a[N / 3][N / 3+1] = base++;
a[N / 3 + 1][N / 3] = base++;
}
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
if (i + j >= N)
a[i][j] = 0;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)