逆时针N阶螺旋方阵 题目: 从键盘中任意输入一个数n,在屏幕中显示出逆时针n阶螺旋方阵。 如图: 当n等于3时得到: 187 296 34 5 当n等于4时得到: 1 12 11 10 2 13 16 9 3 14 15 8 4567 当n等于5时得到题目中所给的方阵。 观察这几个方阵,既然其为螺旋排布,那不妨把数据旋转一圈作为 一次循环。 则当n为3时循环2次,当n为4时循环也2次,当n为5时循环3次。 187 296 34 5 1 12 11 10 2 13 16 9 3 14 15 8 4567 由此可以判断: 当n为奇数时循环次数为m=n/2+1。 当n为偶数时循环次数为m=n/2。 1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 21 20 10 56 7 89 根据方阵形式,我们可以将方阵数据存放在一个二维数组a中。 而且我们可以定义一个变量k用来给数组赋值。 于是就可以写出: int i,j,k=1,a[20][20],m,n; printf(“输入一个小于20的N值”); scanf("%d",&n); if(n%2==0) //判断键入n的奇偶性 m=n/2; else m=n/2+1; for(i=0;i=0;j--) a[j][n-1]=k++; 其循环语句为: for(j=n-i-2;j>=i;j--) a[j][n-i-1]=k++; 在第一次循环对数组a第一行赋值时应注意,a[0][0]和a[0][n-1]都已赋值,因此要 从a[0][n-2]开始,且j要大于0。 for(j=n-2;j>0;j--) a[0][j]=k++; 同样可以推出循环语句: for(j=n-i-2;j>i;j--) a[i][j]=k++; 在输出时,可用嵌套循环输出,注意i void main() { 最后可得如下程序: int i,j,k=1,a[20][20],m,n; printf(“输入一个小于20的N值”); scanf("%d",&n); if(n%2==0) m=n/2; else m=n/2+1; for(i=0;i=i;j--) a[j][n-i-1]=k++; for(j=n-i-2;j>=i+1;j--) a[i][j]=k++; } for(i=0;i