C語言系列 : 魔術方陣 Magic Square

以二維動態陣列實現依照使用者選擇,來開拓適當大小之魔術方陣。

 完整程式碼:

#include "pch.h"
#include <stdio.h>
#include <stdlib.h>

//先取得N之後再進行二維動態陣列宣告
//接著做填值的動作
int magic(int,int**);
int main()
{
	int N = 1;
	printf("建立N*N大小的魔術方陣,請輸入N值:");
	scanf_s("%d",&N);
	int **matrix = (int **)calloc(N,sizeof(int));
	for (int i = 0; i < N; i++) {
		*(matrix + i) = (int *)calloc(N,sizeof(int));
	}
	printf("\n已建立%d*%d的魔術方陣\n",N,N);
	magic(N, matrix);
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			printf("%5d ",*(*(matrix+i)+j));
		}
		printf("\n");
	}
}
int magic(int N,int **matrix) {
	
	int pos_x = 0, pos_y = (N-1)/2,m=0,n= (N - 1) / 2,real = 0;
	matrix[pos_x][pos_y] = 1;

	for (int i = 2; i < N*N + 1; i++) {
		//評估及一般case
		pos_x = m - 1;
		pos_y = n - 1;
		if (pos_x < 0) pos_x = N - 1;
		if (pos_y < 0) pos_y = N - 1;
		if (matrix[pos_x][pos_y] != 0) {
			real = 1;
		}
		else {
			matrix[pos_x][pos_y] = i;
			real = 0;
			m = pos_x;
			n = pos_y;
		}

		//實際
		if (real == 1) {
			if (m + 1 == N)m = 0;
			else m++;
			matrix[m][n] = i;
		}
		
	}
	return 0;
}

 

執行結果:

_______________________________________________

我們透過閱讀,拼湊出真實世界的面貌,
並在反覆的探索及思維中,打破由自我無知與偏見所建立的籓籬。