C語言實現 螺旋數 方陣
阿新 • • 發佈:2019-02-05
題目是來自C的一道面試題:向一個 NXN 的矩陣中寫入螺旋數
例如:N=3,顯示如下:
1 2 3
8 9 4
7 6 5
附上程式碼
結果顯示:#include <stdio.h> #include <process.h> #include <conio.h> #include <malloc.h> void luoXuan(int **a,int n); void main() { int j,flag=1; char FFLAG; int **a,n,i; while (flag) { printf("input n :\n"); scanf("%d",&n); a=(int **)malloc(n*sizeof(int *)); for (i=0;i<n;i++) { a[i]=(int *)malloc(n*sizeof(int)); } luoXuan(a,n); printf("繼續or退出(Y/N):"); printf("\n"); FFLAG=getche(); if (FFLAG=='Y'||FFLAG=='y') { system("cls"); flag=1; } else if (FFLAG=='N'||FFLAG=='n') { flag=0; } else { } } for (i=0;i<n;i++) { free((int *)a[i]); } free(a); } void luoXuan(int **a, int n) { int i,j,r=1; int m=1; for (i=0;i<n;i++) { a[0][i]=m++; } for (i=n-1;i>=n/2;i--) { for (j=r;j<=i;j++) { a[j][i]=m++; } for (j=i;j>=r;j--) { a[i][j-1]=m++; } for (j=i;j>r;j--) { a[j-1][r-1]=m++; } for (j=r;j<i;j++) { a[r][j]=m++; } r++; } for (i=0;i<n;i++) { for (j=0;j<n;j++) { printf("%4d",a[i][j]); } printf("\n"); }
思路:整體來說,這道題的難點有兩個,一是動態記憶體分配的問題,二是螺旋數的實現問題;
記憶體分配主要掌握malloc函式的用法,螺旋數的實現邏輯是利用迴圈一圈一圈的計算,由外到內,實現起來還是比較簡單。