어떤정수 n에서 시작해 n이 짝수면 2로 나누고, 홀수면 3을 곱한다음 1을 더한다.
이렇게 해서 새로 만들어진 숫자를 n으로 놓고 n=1이 될때까지 같은 작업을 계속 반복한다.
n이라는 값이 입력되었을 때 1이 나올때까지 만들어진 수의 개수(1포함)를 n의 사이클 길이라고 함
i, j라는 수가 입력되면 i, j사이의 모든수에 대해 최대 사이클 길이를 구하라.
/* The 3n+1 Problem
#include <stdio.h>
int main()
{
int lbound=0, ubound=0, temp=0, i=0, num=0, max_length=0, length=0;
while(printf("Enter the two number : ") && scanf("%d %d", &lbound, &ubound) == 2) {
/* lbound가ubound보다크면swap */
if(lbound>ubound) {
temp = lbound;
lbound = ubound;
ubound = temp;
}
max_length = 0;
for(i=lbound; i<=ubound; i++) {
num = i;
length = 1;
while(num!=1) {
if(num%2 == 1) {
num = 3*num + 1;
length++;
}
else{
num /= 2;
length++;
}
}
if(length > max_length)
max_length = length;
}
printf("Input : %d %d \t Max_length : %d \n\n", lbound, ubound, max_length);
}
return 0;
}
'컴&프로그래밍 > C' 카테고리의 다른 글
팩토리얼 수 구하기 (재귀함수) (0) | 2014.10.24 |
---|---|
피라미드 별찍기 (0) | 2014.10.12 |
정수부분, 소수부분 2진수 변환 (0) | 2014.10.11 |
이진검색 (0) | 2014.10.11 |
파일 복사 하기 (0) | 2014.10.11 |
학생 정보 입력 받아 성적순으로 내림차순 정렬 출력 (1) | 2014.10.11 |
정수 입력하여 16진수 변환후 2씩 곱해가기 (0) | 2014.10.11 |
진법 계산 (0) | 2014.10.11 |
대소문자 바꿔서 출력 (0) | 2014.10.11 |