알고리즘
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
12345678910111213141516171819202122232425262728293031323334 #include <stdio.h>int maxNum;int func(int num) // 어떤 수 num 이 1일 될때까지 변환{int cnt = 1; // 길이while(num!=1){cnt++;if(num%2==0)num /= 2;elsenum = 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);}