반응형
Magic Matrix (마방진) 게임 만들기
<규칙>
1. 숫자는 1부터 1씩 증가해서 채워진다.
2. 숫자 1의 위치
행 = 시작행, 열 = (int)(열 크기/2)
3. 다음 채워지는 숫자의 위치
다음행 = 현재행 - 1
다음열 = 현재열 +1
이때, 행이 처음 행일 경우 다음행은 마지막 행으로, 열이 마지막 열일 경우 다음열은 시작열로 지정한다.
4. 다음에 채워질 위치에 이미 숫자가 존재할 경우,
다음행 = 현재행 + 1
다음열 = 현재열
또는
5의 배수(5, 10, 15 ...) 다음 숫자의 위치는
다음행 = 현재행 + 1
다음열 = 현재열
<출력> 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 |
#include<stdio.h>
#define SIZE 5
int main(){
int m[SIZE][SIZE] = {0};
int i, j, k = 0;
printf("처음 시작 행 : ");
scanf("%d", &i);
j = (int)(SIZE / 2);
m[i][j] = ++k; // k에 '+1'을 해준 후 m[i][j]에 k값을 저장한다.
for(++k; k <= SIZE * SIZE; k++){ // 초기값을 2로 주고 25까지 for문을 반복한다.
if(i == 0) i += SIZE; // 만약 i가 '0'이면, 다음 행은 i = 4가 되어야 한다.
if(j == 4) j -= SIZE;
if(m[i - 1][j + 1] != 0 || k % 5 == 1){ // 다음 칸에 이미 숫자가 존재하고, k가 5의 배수인 다음 칸은 (행 + 1, 열)이다.
if(i == (0 + SIZE)) i -= SIZE;
if(j == (4 - SIZE)) j += SIZE;
if(i == 4) i -= SIZE;
m[++i][j] = k;
}
else
m[--i][++j] = k;
}
for(int i1 = 0; i1 < SIZE; i1++){
for(int j1 = 0; j1 < SIZE; j1++)
printf("%5d", m[i1][j1]);
printf("\n");
}
return 0;
}
반응형
'C' 카테고리의 다른 글
[C언어] 포인터의 크기 (0) | 2021.04.06 |
---|---|
[C언어] 실습: 숙박 관리 프로그램 구현하기 (0) | 2021.03.30 |
[C언어] 실습: 커피 자판기 프로그램 구현하기 (0) | 2021.03.28 |
[C언어] 실습: 좌석 예약 프로그램 구현하기 (0) | 2021.03.23 |
[C언어] 실습: 다차원 배열 출력하기 (0) | 2021.03.22 |