目的:掌握数组算法设计。
内容:以下是一个5X5阶螺旋方阵,编写一个程序exp6-3.cpp输出该形式的nXn(n<10)阶方阵(按顺时针方向旋进)。
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 <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=15;
int main()
{
int n,arr[maxn][maxn];
int i,j,k;
while(~printf("请输入螺旋矩阵的矩阵大小n:\n"))
{
memset(arr,0,sizeof(arr));
scanf("%d",&n);
int start=1;
int temp=n;
i=0;
j=0;
for(k=0; k<n/2; k++)//n阶矩阵可以画n/2个圈
{
for(; j<temp-1; j++)
arr[i][j]=start++;
for(; i<temp-1; i++)
arr[i][j]=start++;
for(; j>k; j--)
arr[i][j]=start++;
for(; i>k; i--)
arr[i][j]=start++;
//进入下一圈
i++;
j++;
temp--;
}
if(n%2==1)//若n为奇数,中间那个数遍历不到,单独赋值
arr[i][j]=start++;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%3d ",arr[i][j]);//固定输出宽度
printf("\n");
}
printf("继续操作请输入1,退出操作请输入0:\n");
int f;
scanf("%d",&f);
if(f==0)
break;
}
return 0;
}