题目:试编程打印用户指定的 n 阶顺时针螺旋方阵(n<10)。
分析:显而易见,本题目是要用二维数组来实现。赋值有四个方向:右、下、左、上依次来赋值。
本题的代码是转载其他的文章,原作者的代码写的非常清楚,再次附上原文链接:https://blog.csdn.net/Pussy_Foot/article/details/90131936。我贴出的代码是经过我的修改而成的,是为了以后我复习比较方便,并非为了剽窃原作者的知识成果,绝无冒犯之意。
代码如下:
#include <stdio.h>
int main(){
int a[10][10],n;
int i,j;
scanf("%d",&n); //让用户输入几阶方阵
int bound0=n-1,bound1=n-1,bound2=0,bound3=1;//下标到什么值就要开始拐弯
int start = 1;
int x=0,y=0;//分别是两个维度的下标
int direction = 0; //定义一个方向,0代表右,1代表下,2代表左,3代表上
while(start<=n*n){
if(direction == 0){
a[x][y++] = start++;//向右前进是行不变,列递增
if(y == bound0){ //转弯的临界条件
direction = 1; //改变方向
bound0--; //改变下一次循环的临界条件
}
}
else if(direction == 1){
a[x++][y] = start++;//向下前进列不变,行递增
if(x == bound1){
direction = 2;
bound1--;
}
}
else if(direction == 2){
a[x][y--] = start++;//向左前进行不变,列递减
if(y == bound2){
direction = 3;
bound2++;
}
}
else if(direction == 3){
a[x--][y] = start++;//向上前进列不变,行递减
if(x == bound3){
direction = 0;
bound3++;
}
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d\t",a[i][j]);
}
putchar('\n');
}
}
运行结果: