본문 바로가기
코드업(codeup)/C

[코드업(codeup)/C]코드업(codeup) 1807 : 우박수 길이 (3n+1) (small) C언어

by starfish22 2021. 12. 2.
728x90

▶문제 : 우박수 길이 (3n+1) (small) (codeup.kr)

 

우박수 길이 (3n+1) (small)

콜라츠의 추측, 3n+1 문제, 우박수 문제라고 불리는 이 문제는 다음과 같다. 1, 어떤 자연수 n이 입력되면, 2. n이 홀수이면 3n+1을 하고, 3. n이 짝수이면 n/2를 한다. 4. 이 n이 1이 될때까지 2~3과정을

codeup.kr

 

▶코드 작성

#include <stdio.h>

int main()
{
    int a, b, num, cnt, Mnum, Mcnt = 0;
    scanf("%d %d", &a, &b);

    for (int i = a; i <= b; i++)//a부터 b 사이의 수
    {
        cnt = 1;//마지막 1이 되는 횟수 추가
        num = i;//i를 보존하기 위해
        while (num != 1)//1이 될 때 종료
        {
            if (num % 2 == 0) num /= 2;//짝수일 때
            else num = num * 3 + 1;//홀수일 때
            cnt++;
        }
        if (cnt > Mcnt)//연산 횟수가 가장 길 때
        {
            Mcnt = cnt;
            Mnum = i;
        }
    }

    printf("%d %d", Mnum, Mcnt);

    return 0;
}

 

▶해석

for문으로 a에서 b사이의 수를 반복하였고, i값을 num변수에 저장하여 while 반복문에 num값을 짝수일 때와 홀수일 때 계산하여 1이 될 때까지 반복하였다. cnt변수로 반복 횟수를 세어 가장 횟수가 많은 수를 Mcnt변수에 저장하였다.

728x90

댓글