题目:建立一个程序,输入整数N,生成并输出N行N列的顺时针螺旋方阵,如下图所示:
解答:这个题目属于编程类经常出现的二维数组基础题,本人作为初学者,自己做出了一套可能有点复杂的解法,欢迎大家讨论交流。
首先是设定基本情况,把第一个数字num[0][0]赋值为1;
int n;
cout<<"请输入矩阵的大小:"<<endl;
cin>>n;
int num[N][N]={0};
int i=0,j=0;
num[0][0]=1;
for(;num[i][j]<n*n;)
{
for(;j<n-1;){
num[i][++j]=num[i][j-1]+1;
/*这个if的作用是当撞到墙壁(出现定义过的),则退出循环,转换方向*/
if(num[i][j+1]!=0)
break;
}
/*若达到末端,则退出循环*/
if(num[i][j]==n*n)
break;
for(;i<n-1;)
{
num[++i][j]=num[i-1][j]+1;
if(num[i+1][j])
break;
}
/*若达到末端,则退出循环*/
if(num[i][j]==n*n)
break;
for(;j>0;)
{
num[i][--j]=num[i][j+1]+1;
if(num[i][j-1]!=0)
break;
}
/*若达到末端,则退出循环*/
if(num[i][j]==n*n)
break;
for(;i>0;){
num[--i][j]=num[i+1][j]+1;
if(num[i-1][j]!=0)
break;
}
}
最后就是输出
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<setw(5)<<num[i][j];
}
cout<<endl;
}
代码执行后的效果如下图: