78 lines
1.8 KiB
Plaintext
78 lines
1.8 KiB
Plaintext
|
/* 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++;
|
|||
|
}
|
|||
|
}
|