검색결과 리스트
글
3n+1
//어떤 정수 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 |