2016-06-03 2 views
8

각 요소가 짝수 (0, 2, 4, 6, 8)로만 구성되는 증가 시퀀스가 ​​있습니다. 우리는 어떻게 할 수 있습니까 find the nth number in this sequence0,2,4,6,8에 의해 형성된 증가 시퀀스에서 n 번째 숫자를 찾으십시오.

O (1) 시간에이 순서로 n 번째 숫자를 찾는 것이 가능합니까?

서열 숫자를 두배로 0, 2, 4, 6, 8, 20, 22, 24, 26, 28, 40, 42, 44, 46, 48, 60, 62, 64, 66, 68, 80, 82, 84, 86, 88, 200, 202 and so on.

+0

는? –

+2

OP에서 ZERO의 노력을 보여주는 과제물을 덤프하기 때문에이 주제를 오프 토픽으로 끝내기로했습니다. –

+3

정확한 * 유형 * 문제를 보았을 때 웹에서 첫 번째로 멈추는 것은 [OEIS (On-Line Encyclopedia of Integer Sequences)] (https://oeis.org)입니다. [sequence 0 , 2, 4, 6, 8, 20, 22, 24, 26, 28, 40, 42] (https://oeis.org/search?q=0%2C+2%2C+4%2C+6% 2C + 8 % 2C + 20 % 2C + 22 % 2C + 24 % 2C + 26 % 2C + 28 % 2C + 40 % 2C + 42 & 언어 = 영어 & go = 검색). –

답변

11

이 시퀀스에서 n 번째 숫자는베이스 (5)에서 n이된다.

def base5(n): 
    if n == 0: return 
    for x in base5(n // 5): yield x 
    yield n % 5 

def seq(n): 
    return int(''.join(str(2 * x) for x in base5(n)) or '0') 

for i in xrange(100): 
    print i, seq(i) 

이것은 O (log n) 시간에 실행됩니다. 나는 O (1) 시간에 그것을 할 수 있다고 생각하지 않는다.

이베이스의 생성과 N의 5 자리 숫자의 두 배를 결합하여 비트를 간략화 할 수

def seq(n): 
    return 10 * seq(n // 5) + (n % 5) * 2 if n else 0 
+0

감사합니다 Paul, O (logn)도 좋습니다 :) – Godfather

+0

@ Paul Hankin : 선생님,이 순서를 어떻게 해결하셨습니까? –

+0

@Ram 그것은별로 도움이되지 않지만, 5 번베이스의 숫자와의 관계를 바로 보았습니다. 코드 작성은 비교적 간단합니다. 위의 주석에있는 Lasse는 OEIS에서 시퀀스를 검사 할 것을 제안했습니다 - 보지 않았다면 패턴을 찾는 좋은 방법이 될 것입니다. –

-2
int Code() 
{ 
    k=0; 
    for(i=0;i<=10000;i++) 
    { 
     count=0; 
     n=i; 
     while(n!=0) 
     { 
      c=n%10; 
      n=n/10; 
      if(c%2!=0) 
      { 
       count=1; 
      } 
     } 
     if(count==0) 
     { a[k]=i; 
     k++;} 
    } 
} 
n이 형태는 0 또는 1을 시작할 것이다