以二維動態陣列實現依照使用者選擇,來開拓適當大小之魔術方陣。
完整程式碼:
#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;
}
執行結果:
_______________________________________________
我們透過閱讀,拼湊出真實世界的面貌,
並在反覆的探索及思維中,打破由自我無知與偏見所建立的籓籬。