반응형
사이클 길이?
어떤 정수 n이 짝수면 2로 나누고 홀수면 3을 곱한 다음 1을 더한다. 이런 과정을 반복하면서 n=1이 되면 멈춘다. 이 때 1이 나올 때까지 만들어진 수의 개수를 (n과 1 포함) 사이클 길이라고 한다.
입력 : 22
출력 : 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
사이클 길이는 16
위와 은 수열을 출력하고 사이클 길이를 리턴해주는 함수를 순환을 이용하여 작성하시오.
int get_cycle_number(int n) {
int cycle_length = 1;
printf("%d ", n); //수열을 만들면서 숫자 출력
if (n == 1)
return count;
else if (n % 2 == 0) //n이 짝수이면
cycle_length+=get_cycle_number(n / 2); //n을 2로 나누고 자기 자신을 호출한다.
//이 때 사이클 길이가 1 추가되므로 count에 더하면서 호출함
else //n이 홀수이면
cycle_length+=get_cycle_number(n * 3 + 1); //n에 3을 곱하고 1을 더한다.
return cycle_length; //모든 호출과정이 끝나고 구해진 사이클 길이(count)를 return한다.
}
int main(void) {
int num;
scanf("%d", &num);
printf("\n사이클 길이는 %d\n", get_cycle_number(num));
}
반응형
'⚙️ 알고리즘 > 기타 문제 & 풀이' 카테고리의 다른 글
[C] 퀵정렬을 이용한 몇 번째 작은수 (0) | 2020.08.01 |
---|---|
[C] 순환을 이용한 배열에서 최대값 찾기 (0) | 2020.07.23 |
[C] 하노이탑(the tower of hanoi) 재귀 (2) | 2020.07.23 |
[C] 문자열을 입력받아 첫 번째로 등장하는 단어 출력 (0) | 2020.07.18 |
[C] 문자열 병합 (0) | 2020.07.18 |