마방진(magic square)이란 가로,세로, 대각선의 합이 같은 사각형을 말한다.
구현 방법은
시작은 첫행 , 중간열 에서 1 을 두고
행을 감소, 열을 증가하면서 순차적으로 수를 넣어간다.
예외처리 두 가지
입출력 예
입력
9
출력
8 1 6
3 5 7
4 9 2
---------------------------------------------------------
#include<stdio.h>
#include<math.h>
void main()
{
int sq[100][100]={0}; //마방진칸
int i,j; //for문 변수
int a,b=1,num2; // num2=마방진 칸을 제곱근으로 바꿔 배열설정
int x=0,y=0;
double num; //num= 마방진 칸수
do //마방진 입력이 잘못되었으면 재입력
{
printf("마방진의 칸수(홀수의 제곱수_최대 100)를 입력하세요: ");
scanf("%lf", &num);
}
while((int)num%2==0 || num>100);
num2=sqrt(num); //num 제곱근으로 변경
a=num2/2;
sq[0][a]=b;
x=num2/2;
for(i=0;i<num-1;i++)
{
b+=1;
int yy=y-1;
int xx=x+1;
if(yy<0) //위로 올라갈곳이없을시 가장아래로 이동
yy=num2-1;
if(xx>num2-1) //오른쪽으로 이동이불가능할시 맨왼쪽으로 이동
xx=0;
if(sq[yy][xx]!=0) //이동하려는곳에 숫자가 이미있을경우 아래로 이동
{
y+=1;
if(y>=num2)
y=0;
}
else
{
x=xx;
y=yy;
}
sq[y][x]=b;
}
for(i=0;i<num2;i++)
{
for(j=0;j<num2;j++)
{
printf("%3d",sq[i][j]);
}
printf("\n");
}
}
지젼이시네요 대단하세요
답글삭제