2016-10-19 3 views
-2

Frage: wow, Ihnen werden zwei Dinge gegeben:könnte mir jemand sagen, was ist daran falsch?

Die aufrufende Reihenfolge, in der alle Prozesse aufgerufen werden. Die ideale Reihenfolge, in der alle Prozesse ausgeführt werden sollten. Lassen Sie uns dies an einem Beispiel demonstrieren. Nehmen wir an, dass es drei Prozesse gibt, die Aufrufreihenfolge der Prozesse ist: 3-2-1. Die ideale Reihenfolge ist: 1 - 3 - 2, d. H. Prozessnummer 3 wird nur ausgeführt, nachdem Prozessnummer 1 abgeschlossen wurde; Prozessnummer 2 wird erst ausgeführt, nachdem Prozessnummer 3 ausgeführt wurde.

  1. Iteration # 1: Da die ideale Reihenfolge zunächst ausgeführten Prozess # 1 werden muss, bestellt der anruf geändert wird, das heißt, das erste Element auf den letzten Platz gedrückt werden muss. Das Ändern der Position des Elements dauert 1 Zeiteinheit. Die neue Aufrufreihenfolge lautet: 2 - 1 - 3. In Schritt 1 eingegebene Zeit: 1.

  2. Iteration # 2: Da der ideale Auftrag zuerst den Prozess Nr. 1 ausführen muss, muss der aufgerufene Auftrag geändert werden wieder, dh das erste Element muss an den letzten Platz geschoben werden. Die neue Aufrufreihenfolge lautet: 1 - 3 - 2. In Schritt 2 eingegebene Zeit: 1.

  3. Iteration 3: Da das erste Element der aufrufenden Reihenfolge identisch mit der idealen Reihenfolge ist, wird dieser Prozess ausgeführt . Und es wird so herausplatzen. Zeit in Schritt # 3: 1.

  4. Iteration # 4: Da das neue erste Element der aufrufenden Reihenfolge dasselbe ist wie die ideale Reihenfolge, wird dieser Prozess ausgeführt. Zeit in Schritt # 4: 1.

  5. Iteration # 5: Da das letzte Element der aufrufenden Reihenfolge dasselbe ist wie die ideale Reihenfolge, wird dieser Prozess ausgeführt. Zeit in Schritt # 5: 1.

Gesamtzeit: 5 Einheiten. S: Die Ausführung eines Prozesses dauert 1 Zeiteinheit. Das Ändern der Position dauert 1 Zeiteinheit.

Eingabeformat: Die erste Zeile eine Zahl N, die die Anzahl der Prozesse angibt. Die zweite Zeile enthält die Aufrufreihenfolge der Prozesse. Die dritte Zeile enthält die ideale Reihenfolge der Prozesse.

Ausgabeformat: Die Gesamtzeit drucken, die für die gesamte Warteschlange der auszuführenden Prozesse benötigt wird.

Constraints: 1 < = N < = 100

Abtastwerteingang

3 
3 2 1 
1 3 2 

SAMPLE OUTPUT

5 

Die erste Methode, die zu mir kam, war eine Variable zu deklarieren und sie erhöhen um eins nach jedem Tausch plus 2, aber wenn wir dann ein Array der Größe 3 nehmen, gibt es nur zwei Möglichkeiten. Daher habe ich diese ausgedruckt, und ja, das ist ein Problem von einem Online-Richter, es gab keinen Syntaxfehler, aber auf der Seite sagt es, dass es ein Problem in der Deklaration gab, ich habe keine Ahnung, was zu tun ist Ich bin neu im Programmieren und kann jemand eine neue Methode vorschlagen, die für Arrays von größeren Größen anwendbar ist.

#include <stdio.h> 

swap(a,b); 
long long int a,b; 

int main(void) { 
    long long int n,i; 
    long long int a[3],b[3]; 
    scanf("%d",&n); 

    for(i=0;i<=2;i++) 
    { 
    scanf("%d",a[i]); 
    } 

    for(i=0;i<=2;i++) 
    { 
    scanf("%d",&b[i]); 
    } 

    if(a[i]=b[i]) 
    { 
    printf("2"); 
    } 

    while(a[i]!=b[i]) 
    { 
    swap(b[0],b[2]); 
    swap(b[0],b[1]); 
    { 
     if(a[i]=b[i]) 
     printf("5"); 
    } 
    } 

    return 0; 
} 

swap(a,b){ 
    long long int temp; 
    a=temp; 
    b=a; 
    temp=b; 
    return swap(a,b); 
} 
+0

Bitte formatieren Sie Ihren Code richtig. Richtige Formatierung ist kein _ "es ist nicht wichtig, ich kann das später tun" _ Sache !! –

+0

Und formatieren Sie auch den Fragetext. Es ist schwer zu lesen. Ein Titel ist nicht sinnvoll. –

+0

Benötigen Sie Arrays? Eine "Deque" -Datei (d. H. Eine doppelendige Warteschlange) scheint für dieses Problem eine viel bessere Datenstruktur zu sein. http://www.cplusplus.com/reference/deque/deque/ – Dan

Antwort

2

Ihre swap() Funktion hat mehrere Probleme:

1: Es nennt sich mit return swap(a,b); in der letzten Zeile der Funktion. Dies führt zu einer unendlichen Rekursion und einem Stapelüberlauf.

2: Sie müssen den Rückgabetyp der Funktion deklarieren. Wenn es dauert zwei long long Parameter und gibt nichts, dann sollte es wie folgt deklariert werden:

void swap(long long a, long long b); 

3: Wie schon geschrieben, wird die Funktion ohnehin keine Wirkung. Sie müssen Zeiger auf diese Variablen zu übergeben, wenn Sie ihre Werte ändern möchten:

long long swap(long long *a, long long *b); 

4: Um Zeiger auf diese Funktion übergeben, das Präfix die Parameter mit & wie folgt:

swap(&b[0],&b[2]); /* NOT: swap(b[0],b[2]); */ 

5 : Die Reihenfolge der Operationen in der swap() Funktion ist ebenfalls falsch. Sie beginnen damit, dass Sie den Wert a unwiederbringlich verlieren, anstatt ihn zu speichern, sodass er b zugewiesen werden kann. Versuchen Sie stattdessen:

void swap(long long *a, long long *b) { 
    long long temp; 
    temp = *a; 
    *a = *b; 
    *b = temp; 
} 

HINWEIS: Bitte erfahren Sie, wie Sie den Code richtig zu formatieren. Außerdem sollten Sie Ihren Entwicklungscode immer mit aktivierten Warnungen kompilieren (z. B. -Wall -pedantic zur Befehlszeile hinzufügen). Dies hätte Ihre Aufmerksamkeit auf die meisten, wenn nicht alle diese Probleme gelenkt, ohne dass Sie hier fragen müssen.

Verwandte Themen