생각의 Y에 2595 X

소규모 학급 Y는 오프 바보 바보짓, 그는 종이 X와 Y에 두 개의 임의의 숫자를 썼다 이제 그는이 과정을 더 재미있게 만들기 위해, 어떤 방법으로 Y X가되고 싶다, 그래서 그는 자신 만의 두 가지 작동 모드를 사용 제한 :

(1) 현재의 X 별 두

2, 현재 X 다른 이름으로 저장

때문에 교실에서 제한된 시간, 그래서 그는이 프로세스를 달성하기위한 동작의 최소 수를 사용 하였다. 수업 후, QZ 통과하는 X와 Y Y, 그는 작업의 수와 두 번째 작은 Y에서 알 말한다 종이의 작은 조각을 참조하십시오. 그래서 질문은 몇 번 작동합니까 결국 작은 Y와 함께, 무엇입니까?

 

기입

두 숫자의 X 및 Y를 나타낸다 
. 1 <= X <= 1,000,000,000 
. 1 <= Y <= 1,000,000,000

수출

Y는 X가된다이다 수많은 동작의 최소 개수를 요구

샘플 INPUT

1 1000000000

샘플 출력

(39) 


다음에, Y는 X가 두 개의 동작 모드를 고려해 1.y / = 2 2.y + = 1;
y는 다음 만 번째 실행 홀수 인 경우 Y + = 1 짝수된다
Y가 짝수 일 때, 직접 이외에 후, Y / 2로 고려 그것은지면 / 2 + 1, 제 첨가에 연결되는 Y, 단계 (2)의 동작이, 그렇지 않으면 다음 2/2의 동작을 추가 단계 3]
이므로 짝수위한 부가 더하도록 함께,
그 전체 용액 나온 / 2의 짝수 번호, Y <X의 경우, 그 수 플러스 (XY)이고;
#INCLUDE <cstdio> 
#INCLUDE <CString을> 
#INCLUDE <알고리즘> 
#INCLUDE <cstdlib> 
#INCLUDE <지도> 
#INCLUDE <iostream> 
#INCLUDE <CString을> 
#INCLUDE <문자열> 
사용 스페이스 성병; 
CONST의 INT의 maxn = 2010; 
타입 정의 오래 오래 LL; 
#DEFINE rdint (X)는 scanf ( "%의 D ', X) 
#DEFINE의 INF 0x3f3f3f3f 
INT X, Y; 

INT의 main () 
{ 
	rdint (X); rdint (Y); 
	INT 미네소타 = INF; 
	INT CNT = 0; 
	(1) {동안 
		경우 (X == Y) 체류; 
		(2 == 0 && Y> X Y %)의 {경우 
			CNT ++; Y / 2 =; 
		} 
		다른 경우 (Y> X && Y % 2 == 1) { 
			CNT ++; Y + = 1;
			Y에서의 X =; 단절; 
		} 
	} 
	COUT << CNT << ENDL; 
	시스템 ( "중지"); 
0을 반환 //; 
}

  


추천

출처www.cnblogs.com/zxyqzy/p/11128695.html