[C언어 코드업 문제풀이] CodeUp 1510 : 홀수 마방진
ET의 공부/C언어 연습문제[ 코드업 ]2020. 5. 10. 17:38
코드업 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;
}
|
'ET의 공부 > C언어 연습문제[ 코드업 ]' 카테고리의 다른 글
[C언어 코드업 문제풀이] CodeUp 1512 : 숫자 등고선 (0) | 2020.05.10 |
---|---|
[C언어 코드업 문제풀이] CodeUp 1511 : 테두리의 합 (0) | 2020.05.10 |
[C언어 코드업 문제풀이] CodeUp 1509 : 진격 후 결과 (0) | 2020.05.10 |
[C언어 코드업 문제풀이] CodeUp 1508 : 나도 IQ 150 (0) | 2020.05.10 |
[C언어 코드업 문제풀이] CodeUp 1507 : 4개의 직사각형 넓이 (0) | 2020.05.05 |
댓글()