#define MAX 7 //최대 7로 한당.
/*---------------------------------
1 2 3 4 5 6 7
24 25 26 27 28 29 8
23 40 41 42 43 30 9
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
19 18 17 16 15 14 13
----------------------------------*/
int matix[MAX][MAX];
/* 행렬 변수 */
int col=0, row=0; //row -> 아래로(열) col -> 옆으로(행)
int incre=1; //1부터 시작
int line=0;
int size=MAX-1; //7-1 = 6
int init;
while(incre<MAX*MAX) //1~49까정
{
switch(line%4) //0 1 2 3 //% -> 나눗셈(나머지 값으로 case 돌린다.)
{
case 0:
for(init=col;col<size;col++) //오른쪽으로 행의 값 증가
{
matix[row][col]=incre++; //[0][0] -> [0][1] ----> [0][6] incre 01~07까지 증가
}
break;
case 1:
for(init=row;row<size;row++) //아래로 열의 값 증가
{
matix[row][col]=incre++; //[0][6] -> [1][6] ----> [6][6] incre 08~13까지 증가
}
break;
case 2:
for(col;col>MAX-size-1;col--) //왼쪽으로 행의 값 감소
{
matix[row][col]=incre++; //[6][6] -> [6][5] ----> [6][0] incre 14~19까지 증가
}
break;
case 3:
for(row;row>MAX-size;row--) //위로 열의 값 감소
{
matix[row][col]=incre++; //[6][0] -> [5][0] ----> [1][0] incre 20~24까지 증가
}
size--; //6-1 = 5 //안쪽으로 도는 구조라 하나씩 감소 시킨다.
break;
}
line++; //오른쪽-아래로-왼쪽-위로 계속 돌 수 있게 처리하기 위해 값을 넣는다.
}
/*멘마지막 중간에 가장 큰 수*/
if(MAX/2)
matix[MAX/2][MAX/2]=MAX*MAX;
else
matix[MAX/2][MAX/2-1]=MAX*MAX;
|