어떤 정수 n이 짝수면 2로 나누고 홀수면 3을 곱한 다음 1을 더한다. 이렇게 해서 새로 만들어진 숫자를 n으로 놓고 n=1이 될 때까지 같은 작업을 반복한다.
예를 들어 n=22이면 다음과 같은 수열 이 만들어진다.
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
이 때 1이 나올 때까지 만들어진 수의 개수를 (n과 1포함) 사이클 길이라 한다.
예를 들어 n=22인 경우에는 사이클 길이가 16이다 (15아님).
특정한 수를 파라미터로 받아 위와 같은 수열을 출력하고 사이클 길이를 리턴해주는 함수를 반복문을 이용하여 작성하시오.
함수의 원형은 int get_cycle_number(int n); 이다. main함수를 만들어 위의 함수를 테스트하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int get_cycle_number(int n);
int main (void)
{
int number;
printf("숫자를 입력하세요:");
scanf("%d", &number);
printf("\n%d",get_cycle_number(number));
return 0;
}
int get_cycle_number(int n)
{
int length = 1;//처음에 입력된 값이 있으니 1로놓기
printf("%d ", n);
do {
if (n % 2 == 0)
n = n / 2;
else
n = n * 3 + 1;
printf("%d ", n);
length++;
} while (n != 1);
return length;
}
|
cs |
length는 처음에 입력된 값이 있으니 1로 놓는다
n이 1이 아닐때까지 반복하고 1이면 빠져나온다
n이 짝수면 2를 나누고 홀수면 3을 곱하고 1을 더한다
한 반복이 끝날때마다 길이도 1씩 증가하게 해놓는다