Programming/c언어 / / 2016. 6. 21. 01:27

c 언어 마방진 구현!

반응형


















마방진 c언어로 구현!



마방진 원리

1.첫번째 행의 중앙에 1을 놓는다.
2.왼쪽 대각선 방향으로 올라가면서 빈자리에 1씩 큰 수를 놓는다.
이때 행렬의 밖으로 벗어나면 그 방향의 반대편에서 계속하라.

3.만약 이동하려는 자리에 숫자가 이미 채워져 있으면 지금 위치의 바로 아래에
숫자를 놓는다
.


쉽게 생각하시면 됩니다.
1행 가운데서 시작해서 왼쪽위로 한칸씩 이동하면서 1식 더해서 숫자를 넣는다고 생각하시면 됩니다.
밑에 사진을 보시면 아시겠지만 왼쪽 위로 계속 이동하다가 5의 배수면 그냥 한칸밑으로 내려가고
행렬의 처음으로 도착했을시에는 행열의 끝으로 이동하는 것을 씨언어로 코딩해주시면 됩니다.
1~25라는 숫자를 행열의 인덱스에다가 저장한후에 순서대로 출력하면 마방진이 완성됩니다.



c언어로 구현하기!



#include<stdio.h>

#define MAX_SIZE 15//최대 값 설정

void make_msquare(int arr[][MAX_SIZE],int n);//마방진 구현 함수

void display(int arr[][MAX_SIZE],int n);//마방진 출력 함수

main()

{

int arr[MAX_SIZE][MAX_SIZE];

int n;//n*n마방진 입력받는 변수

printf("마방진홀수입력:");

scanf("%d",&n);

make_msquare(arr,n);

display(arr,n);


}

void make_msquare(int arr[][MAX_SIZE],int n)//마방진 구현할 함수

{

int i;//숫자를 저장할 변수

int a=0,b=n/2;//시작위치 설정

for(i=1;i<=n*n;i++)//마방진을 1부터 25까지 채운다.

{

arr[a][b]=i;//n x n 배열에다가 1~25까지 채운다.


if(i%n==0)//5의 배수이면 열을 한칸 내려야 하므로 a++시켜준다

a++;

else

{

if(a==0)//배열의 처음부분 으로 도착했으면 끝부분으로 이동한다.


a=n-1;

else

a--;


if(b==0)//배열의 처음부분 으로 도착했으면 끝부분으로 이동한다.


b=n-1;


else

b--;

}


}

}

void display(int arr[][MAX_SIZE],int n)//마방진 출력하는 함수(출력은 그냥 n*n 2차행열 순서대로 출력해주세면 되요.

{

int i,j;

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

printf("%3d ",arr[i][j]);

}

printf("\n");//n개출력후 줄바꾸기

}

}

결과화면!!





반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유