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
복사