3n+1

☆C언어/소스 2013. 6. 27. 17:55

//어떤 정수 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이라는 값이 입력되었을때 1이 나올때까지 만들어진 수의 개수(1을 포함)를 n의 사이클 길이라고 한다.

//위에 있는 수열을 예로 들면 22의 사이클 길이는 16이다. i와 j라는 두개의 수가 주어졌을때,

//i와 j사이의 모든 수(i, j포함)에 대해 최대 사이클 길이를 구하라.

#include<stdio.h>

int main()

{

// FILE *in=fopen("input.txt","r");

// FILE *out=fopen("output.txt","w");

int i=0,j=0,

su1=0,su2=0; //숫자 범위

int count=0; //숫자 개수 함수 호출수

int arr[1000][2]={0,}; //배열

int min=0,max=0; //계산한 사이클, 최대 사이클

int cc=0; //숫자범위가 앞에가 클때 ex)100 1

// while(EOF!=fscanf(in,"%d %d",&su1,&su2))

while(EOF!=scanf("%d%d",&su1,&su2))

{

// printf("%d %d " ,su1,su2);

// arr[count][0]=su1;

// arr[count++][1]=su2;

// }

// printf("\n카운트 : %d\n ",count);

// for(i=0;i<count;++i)

// {

// func(arr[i][0],arr[i][1]);

cc=0;

if(su1>su2)

{

int temp=su2;

su2=su1;

su1=temp;

cc=1;

}

max=0; //초기화

for(j=su1;j<=su2;++j)

{

int num=j;

int cycle=1;

while(num!=1)

{

if(num%2)

{

//홀수

num=num*3+1;

}

else

{

//짝수

num=num/2;

}

++cycle;

}

if(max<cycle)

max=cycle;

}

//출력

if(cc==1)

printf("%d %d %d\n",su2,su1,max);

else

printf("%d %d %d\n",su1,su2,max);

}

// fclose(in);

// fclose(out);

return 0;

}

'☆C언어 > 소스' 카테고리의 다른 글

바이너리 파일 핸들링  (0) 2017.06.15
달력 문제  (0) 2017.06.14
3n+1 재귀함수  (0) 2013.06.27
최소의 동전수 (재귀)  (0) 2013.06.23
c언어 숫자 변수에 문자입력시 출력  (0) 2012.10.10