2011-01-04 5 views
1

2 진수가 같은 숫자가 증가하는 시퀀스가 ​​있습니다. 일련의 각 숫자에 설정된 1 비트의 수인 n을 감안할 때 일련의 n 번째 숫자를 찾으려면 알고리즘 또는 C 프로그램을 작성하십시오. n 번째 비트가 1로 설정된 n 번째 비트 번호

내가 인터넷에이 질문을 발견하고 나는 대답은 단지 생각 (((1 < < (N + 1)) - 1) & ~ 2). 그게 옳지 않아? 나는 답을 계산할 무서운 프로그램을 발견했다.

+6

확인을 위해 프로그램을 작성해서는 안됩니다! –

+0

두 개의 'n'변수가 같은가요? 다른 말로하면, "각 숫자에 5 개가 있으면 5 번째 숫자를 찾으시겠습니까?"라는 질문입니다. – cdhowie

+0

네, 맞습니다. –

답변

5

(1 << n+1) - 3은 결과를 표현하는보다 간결한 방법이지만 네 표현이 정확하다고도 믿습니다.

+0

그건 의미가 있습니다. –

+4

또는 더 나은 것은'(2 << n) - 3' – ruslik

+0

@ruslik : 참으로. –

0

나는 당신이 옳다고 믿습니다. 간단한 방법이 될 것입니다 비록 쓰기 : ((1 < < N) - 1) < < 1.

+0

아니요,이 표현식은 제 거과 동일하지 않습니다. –

+0

죄송합니다. 당신 말이 맞아요 (하나 더 있습니다). – krakover

1

예, 그것은 사실입니다. 우리는 3 비트가있을 때 :

1: 00000111 
2: 00001011 
3: 00001101 // bit 1 will be 0 
4: 00001110 

그렇게 대답은 비트 1 시퀀스가 ​​시작, 어디서 문제는 지정하지 않는 것 0

+0

그의 수식은 n = 3 인 경우 13을 얻습니다. 이것은 3 행에 나열한 번호이므로 수식이 나에게 적합합니다. krakover의 공식이 잘못되었습니다. –

+0

@ 마틴 : 고정. – ruslik

+0

ruslik 아니,이 경우 내 표현은 00001101을 얻을 것이다 - 그렇지 않습니까? (((1 << 4) - 1) & (11111101)) = 00001101 –

-1

입니다 N + 1 비트, 얼마나 많은 수 매번 증가 할 것이고, 귀하의 대답은 시퀀스가 ​​011111로 시작하고 101111로 이동한다고 가정하는 것처럼 보입니다. 그것은 생각할 0011111000 시작할 수 있고, 다음 요소는

제목은 https://groups.google.com/group/algogeeks/browse_thread/thread/5fda06c0be475c41/에서 언급 한 바와 같이 질문, "시리즈의 n 번째 번호", 그래서이 게시물의 제목 편집 1111100000.

수 ("n 번째 비트가 1로 설정된 n 번째 작은 숫자")는 질문의 출처를 실제로 유지하지 않습니다.

+1

아니요 : 5 비트의 경우 11111이 분명히 시퀀스의 숫자이며, 확실히 0011111000보다 작습니다. 따라서 시퀀스를 시작할 수 없습니다 0011111000. –

+0

n 비트가 1로 설정된 n 번째로 작은 정수입니다.보다 구체적으로는 부호없는 정수 여야합니다. –

+0

질문에 "이진수가 같은 숫자가 증가하는 순서가 있습니다." 시퀀스가 가능한 가장 작은 수로 시작해야한다고 말하지는 않습니다. "Sequence S는 같은 수의 2 진 1을 가진 모든 양수로 오름차순으로 정의됩니다." – StriplingWarrior

관련 문제