1. 程式人生 > >C語言實現 螺旋數 方陣

C語言實現 螺旋數 方陣

題目是來自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函式的用法,螺旋數的實現邏輯是利用迴圈一圈一圈的計算,由外到內,實現起來還是比較簡單。