본문 바로가기
프로그래밍/acm

acm 3n+1

by -현's- 2014. 1. 20.
반응형


●어떤 정수 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이 나올때 까지 만들어진 수의 개수를 n의 사이클 길이라고 한다. 위에 있는 수열을 예로 들면 22의 사이클 길이는 16이다. i와 j라는 두개의 수가 주어졌을 때 i,j사이의 모든수에 대해 최대 사이클 길이를 구하라










●소스 코드



#include<stdio.h>


int func1(int a){

int cn=1;

while(a!=1){

if((a%2)==0){

a=a/2;

cn++;

}else{

a=3*a+1;

cn++;

}

}

return cn;

}


int func2(int result, int b){

int tempp;

if(result>b){

tempp=result;

}else{

tempp=b;

}

return tempp;

}



int main(){


int i, j, result = 0;

int chg=0;

int temp=0;

int k=0;


scanf("%d %d",&i, &j);


if(i>j){

chg=i;

i=j;

j=chg;

}


for(k=i; k<j+1; k++){

result=func1(k);


temp=func2(result, temp);

}


printf("%d, %d, %d",i, j, temp);


return 0;

}















반응형

댓글