그레이 코드 P5657

왜곡 주제 경우, 원래의 제목에 액세스하기 위해 주소를 클릭하십시오.

제목 설명

일반적으로 사람들은 모두에게 익숙한  N- n 비트의 사전 식 순서와 바이너리 문자열을, 예를 들어, 모든 2 비트 바이너리 문자열을 사 전적으로 오름차순으로되어 있습니다 : 00,01,10,11.

그레이 코드 (그레이 코드)는 특별한  N- 정확히 다른 인접 특히 두 이진 스트링 사이 필요 n- 비트 이진 스트링 순열있어서, 제 문자열 및 문자열은 인접한 마지막으로 간주 .

모든 2 비트 이진 스트링은 그레이 코드의 예에서 배치되는 것은 : 00,01,11,10.

N- 그레이 코드의 알고리즘은 그레이 코드를 생성하는 단계에 대해서 설명한다 더보다 n 비트 :

  1. 이진 문자열의 그레이 코드는 순서대로, 두 개의 구성 : 0,1.
  2. N- +. 1 개 N- + . 전에 그레이 코드를 1 비트  2 ^ N- (2) 에 의해 생성 알고리즘 N 이진 스트링 정도  N- N- 비트 그레이 코드 (총  2 ^ N- 2 N-A  N- 이진 문자열 N은 비트)의 순서로 배치 된 후, 0 접두사로 구성된 각 문자열 전에.
  3. N- +. 1 N- + 그레이 코드 후  2 ^ N- 2 N 바이너리 스트링, 그것은 알고리즘이 발생하도록 형성 될 수있다  N- (총 n 비트의 그레이 코드를  2 ^ N- 2 N-A  N- 이진 문자열 n은 비트)를 역순으로하고, 프리픽스 (1)를 구성하는 각 문자열 앞에.

요약하면, N-1 + N- + 1 비트의 그레이 코드의  N- 그레이 코드 N은 비트  2 ^ N- 2 차 프리픽스 플러스 0 N 진 스트링에 역순 더한 총 이루어지는 프리픽스 배치되어  2 ^ { } +. 1 N- 2 N- + . 1 진 문자열입니다. 또한,  N- 에서 n 비트 그레이 코드  2 ^ N- 2 N-바이너리 문자열은, 전술 한 알고리즘의 순서는 우리가 그들을 얻을  0 \ 2 ^ N-SIM -. 1 0 ~ 2 N- - . 1 개 ID를.

알고리즘에 따르면,이 그레이 코드는 다음을 실행할 수 있습니다 :

  1. 그레이 코드는 0으로 알려져있다.
  2. 00 처음 두 그레이 코드 01. 이 후, 그레이 코드는 11,10입니다. 0 ~ 3까지 순차적으로 번호 00,01,11,10을 합치고 하였다.

마찬가지로, 세 그레이 코드는 다음을 실행할 수 있습니다 :

  1. 그레이 코드는 2로 알려져있다 : 00,01,11,10.
  2. 처음 네 그레이 코드는 다음과 같습니다 000,001,011,010. 사 후 그레이 코드는 다음과 같습니다 110,111,101,100. 000,001,011,010,110,111,101,100 순차적으로 0부터 7까지 넘버링 : 합치고.

이제 주어진  N- N-, K K, 당신은 생성하기위한 전술 한 알고리즘을 얻을  N- 에서 n 비트 그레이 코드  K 이진 문자열의 K 번호를.

입력 형식

오직 하나 개의 라인 두 정수  N- 형 N- 형, K 보기 표제 의미 설명 K.

출력 형식

만의 행  N- 형 은 n 비트 이진 문자열은 답을 나타냅니다.

샘플 입출력

입력 # 1
2 3
출력 # 1
(10)
입력 # 2
3 5
출력 # 2
111
입력 # 3
44 1145141919810
출력 # 3
00011000111111010000001001001000000001100011

설명 / 팁

샘플 1 [설명]

그레이 코드 2 : 00,01,11,10, 0 ~ 3까지 번호는 문자열 3 그러므로 10입니다.

샘플 2 설명]

그레이 코드 3 : 000,001,011,010,110,111,101,100 0 내지 7로 번호가 문자열되도록 5 111이다.

[데이터 범위]

들면  50 % \ . 5 0 % 데이터 : N- \ 10 당량 의 N- . 1 0

들면  80 % \ . 8 0 % 데이터 : .. K \ 5 당량 \ ^ 6 회 10 K . 5 × . 1 0 . 6

들면  95 % \ . 9 . 5 데이터 % . 1 - K \ 당량 63 ^ {2}이며 K 2 . 6 . 3 - 1.

들면  100 % \ 1 개. 0 0 % 데이터 : . 1 \ n-당량 \ 당량 64 . 1 N- . 6 . 4,  0 \ 당량 K \ ^ LT N-2 0 K < 2 N-

 

#INCLUDE <알고리즘> 
#INCLUDE <iostream> 
#INCLUDE <CString을> 
#INCLUDE <cstdio> 
#INCLUDE <cmath> 
네임 스페이스를 사용하여 표준; 
긴 부호 길이 맥스 = 1; 
INT의 N, 여기서 = 1; 
확인 BOOL; 
긴 부호 길이 K; 
BOOL A [10000]; 
주 () {int로 
	CIN >> >> N (k)를; 
	위한 (INT 난 = 1; N I <; I ++) { 
		맥스 * = 2; 
	} 
	확인 = 1; 
	반면 (맥스> 0) { 
		경우 (OK == 1) { 
			// COUT << 맥스 << ''<< K << ENDL; 
			경우 (맥스> K) { 
				A [여기서 ++] = 0; 
			} 
			다른 { 
				K- = 맥스; 
				A [여기서 ++] = 1; 
				0 = 정상; 
			} 
			맥스 / = 2; 
			잇다; 
		}
		(OK == 0) {경우 
			// COUT << 맥스 << ''<< K << ENDL; 
			경우 (맥스> K) { 
				A [여기서 ++] = 1; 
				1 = 정상; 
			} 
			다른 { 
				K- = 맥스; 
				A [여기서 ++] = 0; 
			} 
			맥스 / = 2; 
			잇다; 
		} 
	} 
	에 대해 (INT 나 = 1; I <= N; I ++) { 
		printf와 ( "%의 D"는 [I])를; 
	} 
	0을 반환; 
}

  

 

추천

출처www.cnblogs.com/xiongchongwen/p/12044664.html