2016-06-03 6 views
8

Wir haben eine ansteigende Reihenfolge, in der jedes Element nur aus geraden Ziffern besteht (0, 2, 4, 6, 8). Wie können wir find the nth number in this sequenceFinden Sie die n-te Zahl in der aufsteigenden Folge von 0,2,4,6,8?

Ist es möglich, n th Nummer in dieser Reihenfolge in O (1) Zeit zu finden.

Sequence: 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

wobei n Null oder Eins Form starten ist:

Es kann durch die Kombination der Verdoppelung der Ziffern mit der Erzeugung der Base 5 Ziffern n ein wenig vereinfacht werden? –

+2

Ich stimme ab, diese Frage als off-topic zu schließen, weil es eine Dump von einer Hausaufgabe ist, die ZERO Mühe vom OP zeigt. –

+3

Ihr erster Stop im Web, wenn Sie sich dieses genaue * Typ * -Problem ansehen, ist die [Online-Enzyklopädie der Integer-Sequenzen (OEIS)] (https://oeis.org), die für die Sequenz 0 zu sagen hat , 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 & Sprache = Englisch & go = Suche). –

Antwort

11

Die n-te Nummer in dieser Sequenz ist n in Basis 5 mit den Ziffern verdoppelt.

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) 

Dies läuft in O (log n) Zeit. Ich glaube nicht, dass es in O (1) Zeit möglich ist.

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

danke Paul, O (logn) ist auch gut :) – Godfather

+0

@Paul Hankin: Sir können Sie mir bitte helfen, wie hast du diese Sequenz gelöst? –

+0

@Ram es ist nicht viel Hilfe für Sie, aber ich sah sofort die Beziehung mit Zahlen in der Basis 5, und von dort aus, Schreiben des Codes ist relativ einfach. Lasse in den obigen Kommentaren schlug vor, die Reihenfolge in OEIS zu überprüfen - das wäre ein guter Weg, um das Muster zu finden, wenn Sie es nicht sehen. –

-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++;} 
    } 
} 
Verwandte Themen