[C언어 코드업 문제풀이] CodeUp 1510 : 홀수 마방진

코드업 1510번 홀수 마방진 문제 풀이 해답입니다.

 

1. 문제 설명

 

마방진(magic square)이란 가로, 세로, 대각선의 합이 같은 사각형을 말한다.

홀수 n 을 입력으로 받아 n * n 홀수 마방진을 구하고자 한다.

구현 방법은

1. 시작은 첫 행 , 중간 열 에서 1 을 두고

2. 행을 감소, 열을 증가하면서 순차적으로 수를 넣어간다.

3. 행은 감소하므로 행이 첫 행보다 작아지는 경우는 행은 마지막 행으로 넘어간다.

4. 열은 증가하므로 열이 끝 열을 넘어가는 경우 열은 첫 열로 넘어간다.

5. 테이블에 들어간 수가 n 의 배수이면 행만 증가(열은 변화없음)

 

2. 입력

 

홀수 n이 입력된다.(n<=49)

 

3. 출력

 

위의 조건을 토대로 크기가 n인 마방진을 출력한다.

 

4. 입력 예시

 

3

 

5. 출력 예시

 

8 1 6

3 5 7

4 9 2 

 

6. 문제 풀이

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
 
int main(void)
{
    int Arr[50][50= {};
    
    
    //1. 시작은 첫 행 , 중간 열 에서 1 을 두고
    
    //2. 행을 감소, 열을 증가하면서 순차적으로 수를 넣어간다.
    
    //3. 행은 감소하므로 행이 첫 행보다 작아지는 경우는 행은 마지막 행으로 넘어간다.
    
    //4. 열은 증가하므로 열이 끝 열을 넘어가는 경우 열은 첫 열로 넘어간다.
    
    //5. 테이블에 들어간 수가 n 의 배수이면 행만 증가(열은 변화없음)
    int n;
    scanf("%d",&n);
    int center = (n+1)/2;
    int value = 0;
    
    int i = 1;
    int j = center;
    for(int k = 0; k< n*n; k++){
        Arr[i][j] = ++value;
        if(value%n == 0){i++;}
        else{
            i--;
            j++;
        }
        if(i < 1){ i = n;}
        if(j > n){j = 1;}
        
    }
 
    for(int i = 1; i <= n; i++){
        for(int j = 1; j<= n; j++){
            printf("%d ",Arr[i][j]);
        }
        printf("\n");
    }
 
    return 0;
}
 
 
 

 

 

댓글()