用C語言實現順時針螺旋方陣的列印(含演算法)
用C語言實現順時針螺旋方陣的列印及
#include<stdio.h>
#define N 20
main()
{
int a[N][N];
int i,j,k,n;
printf("Please input n(0<n<20):");
scanf("%d",&n);
k=1;
for(i=0;i<n/2;i++)
{
for(j=i;j<n-i-1;j++)
a[i][j]=k++;
for(j=i;j<n-i-1;j++)
a[j][n-i-1]=k++;
for(j=n-i-1;j>i;j--)
a[n-i-1][j]=k++;
for(j=n-i-1;j>i;j--)
a[j][i]=k++;
}
if(n%2==1)
a[n/2][n/2]=k;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("/n");
}
}
列印螺旋方陣
演算法:(以五階方陣為例進行分析)
a00a01a02a03a04
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
a10a11a12a13a14
a20a21a22a23a24
a30a31a32a33a34
a40a41a42a43a44
1:找出方陣的層數i與方陣的方陣的階數n的關係:i=(n+1)/2(具體在程式執行過程中i可取值0,1,2進行迴圈);
2:用迴圈控制給每個數族元素進行賦值,需考慮一下幾個問題:
(1)定義變數k讓其進行自增給陣列元素賦值,並進行由外到內的迴圈
(2)觀察方陣的走勢可知:順時針由外到內:
a 行標i=0,列標j 0-3;for(j=i;j<n-i-1;j++)a[i][j]=k++;
b列標j=4,行標i 0-3;for(j=i;j<n-i-1;j++)a[j][n-i-1]=k++;
c 行標i=4,列標 j 4-1;for(j=n-i-1;j>I;j--)a[n-i-1][j]=k++;
d列標 j=0,行標 i 4-1for(j=n-i-1;j>i;j--)a[j][i]=k++;
在迴圈的過程中,如果n為奇數,則n的平方位於a[n/2][n/2]的位置上,有上述迴圈不能實現,所以得特別註明它的實現
(3)方陣的的輸出:用兩個for語句實現方陣的輸出