1. 程式人生 > >用C語言實現順時針螺旋方陣的列印(含演算法)

用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可取值012進行迴圈);

2:用迴圈控制給每個數族元素進行賦值,需考慮一下幾個問題:

(1)定義變數k讓其進行自增給陣列元素賦值,並進行由外到內的迴圈

for(i=o;i<n/2;i++);

(2)觀察方陣的走勢可知:順時針由外到內:

a 行標i=0,列標j 0-3for(j=i;j<n-i-1;j++)a[i][j]=k++;

b列標j=4,行標i 0-3for(j=i;j<n-i-1;j++)a[j][n-i-1]=k++;

c 行標i=4,列標 j 4-1for(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]的位置上,有上述迴圈不能實現,所以得特別註明它的實現

if(n%2==1)a[n/2][n/2]=k;;(如果n為偶數則沒有必要)

(3)方陣的的輸出:用兩個for語句實現方陣的輸出