이 프로그램은 사용자로부터 N값을 입력받아, 0부터 시작하여 1/4씩 증가하는 분수 형태의 수열 0, 1/4, 1/2, 3/4, 1, ...의 첫 N개 항을 차례대로 출력합니다.
문제 예시
예를 들어 N=5를 입력하면 다음과 같은 결과가 나타납니다.
입력 : N = 5
출력 : 0, 1/4, 1/2, 3/4, 1
알고리즘
핵심 아이디어는 각 항을 기약분수 형태로 만들기 위해 분자와 분모를 규칙적으로 결정하는 것입니다. 인덱스 i가 짝수인지 홀수인지, 그리고 4로 나누어떨어지는지에 따라 분자와 분모가 달라집니다.
단계별 절차
- 정수형 변수 num(분자), den(분모), i(반복 변수), n(항의 개수)을 선언합니다.
- 사용자로부터 수열의 길이 n을 입력받습니다.
- i가 0부터 n 미만일 때까지 반복하며 다음을 수행합니다.
- i가 짝수인 경우(i % 2 == 0):
- i가 4로 나누어떨어지면 → num = i / 4, den = 0 (정수로 표현)
- 그렇지 않으면 → num = i / 2, den = 2 (분수로 표현)
- i가 홀수인 경우 → num = i, den = 4 (분수로 표현)
- i가 짝수인 경우(i % 2 == 0):
- den이 0이 아니면 "num/den" 형태로 출력하고, 0이면 num만 단독으로 출력합니다.
- 반복이 끝나면 프로그램을 종료합니다.
C 언어 구현 예제
#include <stdio.h>
int main(int argc, char const *argv[]) {
int num, den;
int i, n;
printf("수열의 길이를 입력하세요\n");
scanf("%d", &n); // 수열은 0부터 시작
for (i = 0; i < n; i++) {
if (i % 2 == 0) { // 분자가 짝수인지 검사
if (i % 4 == 0) { // 4로 나누어떨어지면 약분하여 정수로 처리
num = i / 4;
den = 0;
}
else { // 4로 나누어떨어지지 않는 짝수는 분모 2로 표현
num = i / 2;
den = 2;
}
}
else { // 홀수인 경우 분모 4로 표현
num = i;
den = 4;
}
if (den != 0) { // 분모가 0이 아니면 분수 형태로 출력
printf("%d/%d\n", num, den);
}
else // 그렇지 않으면 일반 숫자 형태로 출력
printf("%d\n", num);
}
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.
수열의 길이를 입력하세요
5
0
1/4
1/2
3/4
1
이처럼 조건 분기만으로 각 항의 분자와 분모를 적절히 설정하면, 별도의 약분 연산 없이도 깔끔한 분수 형태의 수열을 손쉽게 출력할 수 있습니다.