2017-11-03 1 views
2

Zahlen, die in aufsteigender Reihenfolge in Folge angeordnet sind, werden als Eingabe als String angegeben. Das Programm sollte die fehlende Zahl ausgeben?Drucken von fehlenden Zahlen von gegebener Eingabe

EX: 

INPUT 

567568600601602 

OUTPUT 

569 

EXPLANATION 

567,568,600,601,602 are the numbers in sequence and 569 is the missing number 

INPUT 

1112131516 

OUTPUT 

14 

EXPLANATION 

11,12,13,15,16 are the numbers in sequence and 569 is the missing 

MEIN CODE

a=input() 
a=a.rstrip() 
b=list(set(a)) 
l=[] 
p=[] 
c=0 
for i in range(len(b)): 
    if a.count(b[i])>1: 
     c+=1 
j=0 
while j<=len(a): 
    l.append(a[j:j+c+1]) 
    j=j+c+1 
del l[-1] 
k=int(l[0]) 
while k<=int(l[-1]): 
    p.append(k) 
    k=k+1 
for u in range(len(p)): 
    if str(p[u]) not in l: 
     print(p[u]) 
     break 

Meine Frage:

Mein Programm ist nicht in der Lage, die fehlende Zahl bei 2 oder 4-stellige Zahlen als Eingabe in Form von String angegeben zu finden.

input 6768707172 
output of my program 677 
expected output 69 

Wie überprüfen Sie, ob die Zeichenfolge 2 oder 3 oder 4-stellige Zahlen hat und sie entsprechend brechen?

+0

Es ist 14 zurückkehrt ... Ich habe gerade überprüft –

+0

Ich habe gerade aktualisiert überprüfen die code.Just die neue Eingaben bitte! –

+0

Dies ist eine beliebte Interviewfrage. Sie finden die Logik in diesem Link http://www.geeksforgeeks.org/find-missing-number-string-numbers-no-separator/ –

Antwort

1

Ich habe diesen Ansatz nur zum Spaß gemacht und es scheint zu funktionieren (ich kontrolliere schlechte Input-Ausnahmen nicht und es kann sicherlich verbessert werden). Ich fange im Grunde von 1 Char Länge an und versuche, wenn ich recht habe.

Ich hoffe, es hilft:

MAX_LEN = 6 

def findMissingNumber(s): 
    print 'Input received: ' + s 

    for digitsNumber in range(1,MAX_LEN+1): 
     print 
     # Initializing stuff 
     index = digitsNumber 
     currentNumber = int(s[:digitsNumber]) 
     exit = False 
     missing = None 

     while not exit and index < len(s): 
      # Store expected next number 
      nextNumber = currentNumber + 1 
      # Store expected next number length 
      nextNumberLen = len(str(nextNumber)) 
      # Store next number in the provided string 
      # based the lenght of the expected number 
      nextStringNumber = int(s[index : index + nextNumberLen]) 
      print 'Have ' + str(currentNumber) + ', expecting ' + str([nextNumber,nextNumber+1]) + ' and got ' + str(nextStringNumber) 
      # Check if number gotten is the next or the following 
      if nextStringNumber in [nextNumber, nextNumber+1]: 
       # Check if number is not the next 
       # (means there is a number missing) 
       if nextStringNumber != nextNumber: 
        # Check if there was a previous missing number 
        if not missing: 
         print 'Found missing ' + str(nextNumber) 
         missing = nextNumber 
        # If there was, exit and forget missing number 
        # (only 1 missing number allowed) 
        else: 
         print 'More than 1 missing, exit' 
         missing = None 
         exit = True 
       # Set stuff for next iteration 
       currentNumber = nextStringNumber 
       index += nextNumberLen 
      # If end of string, exit 
      else: 
       print 'End of string, exit' 
       exit = True 
     # If only 1 missing found, return it 
     if missing: 
      print 'Returning ' + str(missing) 
      return missing 
     print 'Going to next number lenght' 
    # If no missing found, return -1 
    return -1 

findMissingNumber('6768707172') 

als Ergebnis geben:

Input received: 6768707172 

Have 6, expecting [7, 8] and got 7 
Have 7, expecting [8, 9] and got 6 
End of string, exit 
Going to next number lenght 

Have 67, expecting [68, 69] and got 68 
Have 68, expecting [69, 70] and got 70 
Found missing 69 
Have 70, expecting [71, 72] and got 71 
Have 71, expecting [72, 73] and got 72 
Returning 69 
2

Werten Sie einen Algorithmus mit Pseudocode aus. Identifizieren Sie wichtige Konzepte und erstellen Sie Funktionen mit Parametern. Geben Sie aussagekräftige Namen. Führen Sie Iteration mit Bleistift und Papier durch. Wenn es funktioniert, verfeinern Sie den Algorithmus. Identifizieren Sie Datenstrukturen, die Ihren Anwendungsfall unterstützen.

Der aktuelle Code ist nicht für menschliche Augen gemacht, aber Sie bitten Menschen um Hilfe.