되는대로 살자

[C언어 기출문제&풀이] collatz의 추측 본문

2009~2014/C/C++

[C언어 기출문제&풀이] collatz의 추측

malu 2010. 11. 10. 20:50

프로그램 명: 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

*이 문제 Collatz 추측 으로 알려져 있습니다.

소스코드
#include <stdio.h>

int main()
{
 int a,b,i,j,max=0,head,cnt;
 scanf("%d %d",&a,&b);
 for(i=a;i<=b;i++)
 {
  cnt=0;
  head=i;
  while(1)
  {
   if(head%2==0) head/=2;
   else head=3*head+1;
   cnt++;
   if(head==1)
   {
    if(max<head) max=cnt;
    break;
   }
  }
 }
 printf("%d",max+1);
}