~cpp 
//1. 3n+1문제  [[[[AOI스터디]]]]  
 
#include<iostream.h> 
 
int check(int n); 
 
void main() 
{ 
        int n1;    //입력받는 수1 
        int n2;    //입력받는 수2 
        int max=0; //최대길이의 사이클 길이를 저장한다.  
        cout<<"적당한 두 수를 입력하세요  ( 단.n1<n2 )"<<endl; 
        cin>>n1; 
        cin.get(); 
        cin>>n2; 
        int temp = n2; 
         
        for(int i= n2-n1 ; i >=0 ; i--) 
        { 
                if(check(temp)>max) 
                        max = check(temp); 
                temp--; 
        } 
         
        cout<<"숫자"<<n1<<"과"<<n2<<"사이의 최대 사이클길이는"<<max<<"입니다."<<endl; 
} 
 
int check(int n)//사이클의 길이를 리턴하는 함수 
{ 
        int count = 1;//사이클의 길이 가진다     
         
        while(n!=1) 
        { 
                int temp = n%2; 
                 
                if(temp==0)//temp값이 짝수라면..  
                        n = n/2; 
                else //temp값이 홀수라면.. 
                        n = ((3*n)+1); 
         
                count++; 
        } 
 
return count; 
} 


Retrieved from http://wiki.zeropage.org/wiki.php/3N+1Problem/김회영
last modified 2021-02-07 05:22:16