Data_Structure/資料結構光碟檔/CH02/oddMagic.c.txt

78 lines
1.8 KiB
Plaintext
Raw Normal View History

2025-01-20 21:25:33 +08:00
/* file name : oddMagic.c */
/* <20>_<EFBFBD><5F><EFBFBD>]<5D>N<EFBFBD><4E><EFBFBD>}<7D><><EFBFBD>@ */
#include <stdio.h>
#include <stdlib.h>
#define MAX 15 /* <20>x<EFBFBD>}<7D>̤j<CCA4><6A>15 x 15 */
void Magic(void);
int Square[MAX][MAX]; /* <20>w<EFBFBD>q<EFBFBD><71><EFBFBD>Ưx<C6AF>}v */
int N; /* <20>x<EFBFBD>}<7D><><EFBFBD>C<EFBFBD>j<EFBFBD>p<EFBFBD>ܼ<EFBFBD> */
int main()
{
int i,j;
/* Ū<><C5AA><EFBFBD>]<5D>N<EFBFBD>x<EFBFBD>}<7D><><EFBFBD>j<EFBFBD>p N,N <20><><EFBFBD>_<EFBFBD>ƥB0 < N <= 15 */
do {
printf("\n<>п<EFBFBD><D0BF>J<EFBFBD>_<EFBFBD>ƪ<EFBFBD><C6AA>x<EFBFBD>}: ");
scanf("%d", &N);
if (N % 2 == 0 || N <= 0 || N > 15)
printf("Should be > 0 and <= 15 odd number");
else
break;
} while (1);
Magic(); /* <20>Nsquare <20>ܬ<EFBFBD> N x N <20><><EFBFBD>]<5D>N<EFBFBD>x<EFBFBD>} */
/* <20><><EFBFBD><EFBFBD><EFBFBD>]<5D>N<EFBFBD>x<EFBFBD>}<7D><><EFBFBD>G */
printf("\nThe %d*%d Magic Matrix\n", N, N);
for (i = 1; i <= 5*N; i++)
printf("-");
printf("\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%5d",Square[i][j]);
printf("\n");
}
return 0;
}
void Magic()
{
int i,j,p,q,key;
/* <20><><EFBFBD>l<EFBFBD>Ưx<C6AF>}<7D><><EFBFBD>e,<2C>x<EFBFBD>}<7D><><EFBFBD><EFBFBD><EFBFBD>M 0 */
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
Square[i][j] = 0;
Square[0][(N-1) /2] = 1; /* <20>N1<4E><31><EFBFBD>̤ܳW<CCA4>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m */
key = 2;
i = 0;
j = (N-1) / 2; /* i, j <20>O<EFBFBD><4F><EFBFBD>ثe<D8AB>Ҧb<D2A6><62><EFBFBD>m */
while (key <= N*N) {
p = (i-1) % N; /* p, q<><71><EFBFBD>U<EFBFBD>@<40>B<EFBFBD><42><EFBFBD>m, i, j<>U<EFBFBD><55> 1 <20><><EFBFBD>ܩ<EFBFBD><DCA9><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
q = (j-1) % N;
/* p < 0 (<28>W<EFBFBD>X<EFBFBD><58><EFBFBD>}<7D>W<EFBFBD><57>)*/
if (p < 0)
p = N - 1; /* <20>h<EFBFBD>N p <20><><EFBFBD><EFBFBD> N-1(<28>̤U<CCA4>C) */
if (q < 0)
q = N - 1; /* q < 0 (<28>W<EFBFBD>X<EFBFBD><58><EFBFBD>}<7D><><EFBFBD><EFBFBD>) */
/* <20>h<EFBFBD>Nq <20><><EFBFBD><EFBFBD>N -1(<28>̥k<CCA5><6B>) */
if (Square[p][q] != 0) /* <20>P<EFBFBD>_<EFBFBD>U<EFBFBD>@<40>B<EFBFBD>O<EFBFBD>_<EFBFBD>w<EFBFBD><77><EFBFBD>Ʀr */
i = (i + 1) % N; /* <20>w<EFBFBD><77><EFBFBD>h i <20><><EFBFBD>U ( <20><><EFBFBD>b<EFBFBD><62><EFBFBD>ȤU<C8A4><55> */
else {
i = p; /* <20>N<EFBFBD>U<EFBFBD>@<40>B<EFBFBD><42><EFBFBD>m<EFBFBD><6D><EFBFBD>w<EFBFBD><77><EFBFBD>ثe<D8AB><65><EFBFBD>m */
j = q;
}
Square[i][j] = key;
key++;
}
}