티스토리 뷰

알고리즘

Collatz 추측 문제

path7inder 2014. 9. 24. 18:23
프로그램 명: 3nplusone
제한시간: 1 초

짝수이면 2 로 나누고 , 홀수이면 3 배해서 1 을 더하는 과정을 반복하다 1 이 되면 멈춘다.

두 양의 정수를 입력으로 받아 두 수 사이중 최대 길이를 출력하는게 문제이다.

예를 들어 3 5 가 입력으로 주어진다면

  • 3 10 5 16 8 4 2 1
  • 4 2 1
  • 5 16 8 4 2 1

에서 3 은 길이가 8 로 최대 이다.

입력

두 수가 입력으로 주어진다. 두 수는 10000 이하의 양의 정수이다.

출력

입출력 예

입력

3 5

출력

8
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
29
30
31
32
33
34
#include <stdio.h>
 
int maxNum;
 
int func(int num) // 어떤 수 num 이 1일 될때까지 변환
{
    int cnt = 1; // 길이
    while(num!=1){
        cnt++;
        if(num%2==0)
            num /= 2;
        else
            num = 3 * num + 1;
    }
    return cnt;
}
 
int main()
{
    int from,to;
 
    scanf("%d %d",&from,&to);
 
    int diff = to - from; // 숫자가 꼭 증가하는 형태로 주어지지 않는다.
    
    do{
        int temp = func(from);
        if(maxNum < temp) maxNum = temp;
 
        from += (diff < 0)? -1:(diff>0)?    1:diff; // 차이로 증감을 결정
    }while(from != to);
 
    printf("%d\n",maxNum);
}


'알고리즘' 카테고리의 다른 글

소인수 분해 문제  (0) 2014.09.24
이벤트 문제  (0) 2014.09.24
친구수 문제  (0) 2014.09.24
자물쇠 풀기 문제  (0) 2014.09.18
거듭 제곱 테이블 문제  (0) 2014.09.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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 29 30 31
글 보관함