거의 100만년 만에 프로그래밍이군요...좀 더 할 수있을때 해봐야겠다는 마음입니다...
하루에 하나 식입니다...뒤로 갈수록 어려운거 같습니다...여튼...오랜만에 c코딩이라 떨리는군요...
시간이 허락하는 되로...python으로도 코딩 연습해야겠습니다...첫번째 문재는 정신이 온전한지 정도 체크하는 수준입니다...정답(뭐 쫌 어감이 이상하지만)코드는 나중에 올리지요...하지만...좀더 간결한 뭔가가 있을 것입니다...여튼...열심히 해볼랍니다...ㅜ.ㅜ 여러분도 부디 열심히...해보시길...
=======================================================================================

한빛미디어 Programming Challenges 알고리즘 트레이링 북에 내용입니다...

========================================================================================
Programming Challenges (#1 "3n+1 problem")

어떤 수열을 만들어내는 다음과 같은 알고리즘을 생각해보자. 어떤 정수 n에서 시작해 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

아직 증명되지 않았지만 모든 정수 n에 대해 이 알고리즘을 적용시키면 결국에는 n=1에 이르게 된는 것으로 추측된다. 그리고 이 가설은 적어도 1,000,000까지의 정수에 대해서는 참이다.

n이라는 값이 입력되었을때 1이 나올 때까지 만들어진 수의 개수(1포함)를 n에 사이클 길이 라고 한다. 위에 있는 수열을 예로 들면 22의 사이클 길이는 16이다. i와j라는 두 개의 수가 주어졌을 때 i와 j 사이의 모든 수(i,j 포함)에 대해 최대 사이클 길이를 구하라.

입력 예         출력 예
1 10              1 10 20
100 200        100 200 125
=========================================================================================
/*
08/01/15
by zpa007
정답코드는 아닙니다...
*/
#include <iostream.h>

int f_3n1(int n);

void main()
{
 int i,j,range,max_range=0;

 cout<<"3n+1 program!!!"<<"\n";
 cin>>i>>j;

 int x = i;
 int y = j;

 for(; x<=y; x++)
 {
  range = f_3n1(x);
 
  //max_range
  if(max_range < range)
  {
   max_range = range;
  }
  //
 }

 cout<<i<<"\t"<<j<<"\t"<<max_range<<"\n";


}

//f_3n+1//
int f_3n1(int n)
{

 int count=1;

 do {
  if(n % 2 == 0)
  {
   n = n/2;
   count++;
  }
  else{
   n = (n*3)+1;
   count++;
  }
 }while (n != 1);
 
 return count;

}
//

+ Recent posts

티스토리 툴바