Category (Click)
개발보드 덕질하기

3-6-9 게임 프로그래밍

printf, scanf 등 I/O를 위한 라이브러리인 stdio.h와 문자열을 다루기 위한 string.h 라이브러리를 include
int형 변수 input_num를 선언하고 scanf함수를 통해 숫자를 입력받음. 입력받은 숫자가 5의 배수가 아니라면 입력 요청을 반복하기 위해 main_start라는 이름의 레이블을 생성함.
입력받은 숫자가 5의 배수인지 확인하기 위해 5로 나눈 나머지를 0과 비교함. 나머지가 0이라면 5로 나누어지는 것이기 때문에 5의 배수라고 할 수 있음. 5의 배수가 아닌 경우 앞서 만들었던 레이블인 main_start로 goto문을 이용해 돌아감.
3-6-9에서 사용할 숫자를 저장할 num 변수를 초깃값 0으로 생성하고 num에서 3, 6, 9를 찾고 문자 *로 변경하기 위한 임시 배열을 생성함.
50을 입력할 경우 높이는 10, 너비는 5이기 때문에 높이를 담당하는 첫 번째 for문은 input/5번 반복해야함.
쌍따옴표 안의 M은 %4d입니다.
너비는 반드시 5이기 때문에 두 번째 for문은 5번 반복. 이때 sprintf문을 이용해 출력할 숫자를 temp_array에 미리 저장함.
위에서 sprintf 함수로 생성한 문자열을 for문을 통해 문자열 길이만큼 순회하며 3, 6, 9 숫자를 찾음. 만약 찾았다면 star_cnt에 1을 더함.
쌍따옴표 안의 M은 %4d입니다.
for문 실행이 끝나면 star_cnt를 검사해 0인 경우(3, 6, 9가 없음) 숫자를 그대로 출력하고 아닌 경우 star_cnt만큼 별을 왼쪽 정렬로 채움
이후 한 줄 실행이 끝나면 한 칸 띄워 다음 줄 출력을 위한 for문을 실행함.
#pragma warning(disable:4996) #pragma warning(disable:6031) #include <stdio.h> #include <string.h> int main() { int input_num; main_start: printf("3-6-9 게임입니다. 원하시는 정수를 입력하세요(5의 배수) : "); scanf("%d", &input_num); if (input_num % 5 != 0) { printf("입력하신 숫자는 5의 배수가 아닙니다. 다시 입력해주세요.\n"); goto main_start; } int num = 0; // 3-6-9 게임을 위한 숫자가 저장 char temp_array[10]; for (int i = 0; i < input_num / 5; i++) { for (int j = 0; j < 5; j++) { num++; sprintf(temp_array, "%4d", num); int star_cnt = 0; for (int k = 0; k < strlen(temp_array); k++) { // 27 if (temp_array[k] == '3' || temp_array[k] == '6' || temp_array[k] == '9') { star_cnt++; } } if (star_cnt != 0) { printf("%4d = ", num); for (int n = 0; n < 4 - star_cnt; n++) { printf(" "); } for (int n = 0; n < star_cnt; n++) { printf("*"); } } else { printf("%4d = %4d", num, num); } } printf("\n"); } }
JavaScript
복사