2009. 05. 13 (水)
4배수의 마방진이란 n의 값이 4 8 12 같이 4의 배수로 구성된 마방진을 뜻 합니다.
1. 4배수 마방진 풀이
① 1:2:2 의 비율로 가로 세로를 3등분하여 9개 구역으로 나눕니다.
② 대각선 방향은 정방향으로 1부터 숫자를 차례대로 대입합니다
③ 나머지 영역은 끝에서부터 역방향으로 차례대로 기록 합니다.
2. 소스
#include "stdafx.h"
#include <stdio.h>
#define MAXSIZE 10
int g_nSquare[MAXSIZE][MAXSIZE] ={0, };
bool IsInBlock(int n, int row, int col);
void GetQuaterSquare(int n);
void InitSquare();
void PrintSquare(int n);
int _tmain(int argc, _TCHAR* argv[])
{
InitSquare();
GetQuaterSquare(4);
PrintSquare(4);
InitSquare();
GetQuaterSquare(8);
PrintSquare(8);
return 0;
}
bool IsInBlock(int n, int row, int col)
{
int nQuater = 0;
int nHalf = 0;
nHalf = n /2;
nQuater = nHalf / 2;
if ((row < nQuater) || (row >= nHalf + nQuater))
{
if ((col < nQuater) || (col >= nHalf + nQuater))
{
return true;
}
}
if ((row >= nQuater) && (row < nHalf + nQuater))
{
if((col >= nQuater) && (col < nHalf + nQuater))
return true;
}
return false;
}
void GetQuaterSquare(int n)
{
int row = 0, col = 0;
int nValue = 1;
for (row=0 ; row<n ; row++)
{
for (col = 0 ; col < n ; col++)
{
if(IsInBlock(n, row, col) == true)
g_nSquare[row][col] = nValue;
nValue++;
}
}
nValue = 1;
for (row=n-1 ; row>=0 ; row--)
{
for (col = n-1 ; col >= 0 ; col--)
{
if(IsInBlock(n, row, col) == false)
g_nSquare[row][col] = nValue;
nValue++;
}
}
}
void InitSquare()
{
for (int i= 0 ; i<MAXSIZE ; i++)
for (int j= 0 ; j<MAXSIZE ; j++)
{
g_nSquare[i][j] = 0;
}
}
void PrintSquare(int n)
{
for (int i= 0 ; i<n ; i++)
{
for (int j= 0 ; j<n ; j++)
{
printf("%d\t", g_nSquare[i][j]);
}
printf("\n");
}
}
'[Public] 컴퓨터공학 > 알고리즘' 카테고리의 다른 글
[알고리즘] 시간 복잡도 (12) | 2010.04.28 |
---|---|
[알고리즘] 카프-라빈 알고리즘 (문자열 검색 #1) (28) | 2010.01.23 |
[알고리즘] 홀수 마방진 (0) | 2009.05.11 |
[알고리즘] 소수를 구하자 (소수#1) (0) | 2009.05.08 |
[알고리즘] 하노이의 탑 (1) | 2009.05.06 |