●어떤 정수 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; } |
댓글