目的:掌握数组算法设计。
内容:以下是一个5*5阶螺旋方阵,编写一个程序exp6-3.cpp输出该形式的n*n(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<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int a[100][100];
void build(int n)//螺旋化
{
int i=0,j=0,k,o=1;//i和j是数组下标,o计数
for(k=0;k<(n+1)/2;k++)
{
while(a[i][j]==-1&&j<n)
a[i][j++]=o++;
j--,i++;
while(a[i][j]==-1&&i<n)
a[i++][j]=o++;
i--,j--;
while(a[i][j]==-1&&j>=0)
a[i][j--]=o++;
j++,i--;
while(a[i][j]==-1&&i>=0)
a[i--][j]=o++;
i++,j++;
}
}
void print(int n)//输出操作完后的数组
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(j<n-1)
printf("%2d ",a[i][j]);
else
printf("%2d\n",a[i][j]);
}
int main()
{
int n;
while(cin>>n)//输入n
{
memset(a,-1,sizeof a);//初始化
build(n);
print(n);
}
return 0;
}
运行结果: