2016-10-10 1 views
-5
int main(){ 
    int n; 
    cin >> n; 
    vector<int> arr(n); 
    for(int i =0; i < n; i++){ 
     cin >> arr[i]; 
    } 
    for(int i = n-1; n-1 >= 0; i--){ 
     cout << " "<< arr[i] << " "; 
    } 
    return 0; 
} 

Was mache ich falsch? Ich fühle mich wie ich bin auf dem richtigen Weg, aber ich bin mir nicht sicher, was falsch ist, das ist das Array-DS-Problem auf Hacker-Rang. Leider glaube ich nicht, dass sie die Antwort enthüllen.Umgekehrtes Array C++? Was mache ich falsch?

+2

Warum gehen Sie nicht und lesen Sie über [Schleifen] (https://www.tutorialspoint.com/cplusplus/cpp_loop_types.htm) – user3286661

+2

Du hast versagt 'zu verwenden std :: reverse'. – juanchopanza

+1

für (int i = n-1; n-1> = 0; i--) ... – Treycos

Antwort

1

Ändern Sie die Bedingung zu i >= 0, Es besteht die Möglichkeit, dass n - 1 >= 0 zu einer Endlosschleife führen kann. Aber es spielt keine Rolle, ob dies der Fall ist oder nicht, weil es in beiden Fällen nicht die gewünschten Ergebnisse liefert.

for(int i = n-1; i >= 0; i--){ 
    std::cout << " "<< arr[i] << " "; 
} 

Oder verwenden Sie, std::reverse.

std::reverse(arr.begin(), arr.end()); 
for (int i = 0; i < n; i++){ 
    std::cout << arr[i] << " "; 
} 

Siehe den zweiten Ansatz live here.

+2

oder verwenden Sie ['std :: reverse] (http://en.cppreference.com/w/cpp/algorithm/reverse) – user4581301

+0

Ja! Na sicher. –

0
for(int i = n-1; n-1 >= 0; i--){ 
    cout << " "<< arr[i] << " "; 
} 

Sie verringern nicht n, die zu einer Endlosschleife führt, wenn n < ist = 0.

0

Sie das Rad nicht neu zu erfinden, wird die Standardbibliothek Ihnen dabei helfen. std::reverse
Verwendung:

int main() 
{ 
    std::vector<int> vec; 
    int n = 0; 
    int temp = 0; 

    std::cin >> n; 
    for (int i = 0; i != n; ++i) { 
     std::cin >> temp; 
     vec.emplace_back(temp); 
    } 

    std::reverse(std::begin(vec), std::end(vec)); 
} 
0

In beiden Fällen haben sie die die Variable i = 0 initialisiert und inkrementiert genommen (in der ersten Schleife)/dekrementiert (in der zweiten Schleife) je nach Bedarf. In der zweiten Schleife haben Sie jedoch die Bedingung auf n gesetzt, trotz der Tatsache, dass Sie niemals den Wert von n ändern. Dies wird zu einer Endlosschleife führen, da n-1 während des gesamten Programms konstant bleibt. Um dies zu beheben, sollten Sie die Bedingung wie im folgenden Code zu i-1> 0 ändern.

for(int i = n-1; i-1 >= 0; i--) 
{ 
    cout << " "<< arr[i] << " "; 
} 

Do upvote, wenn dies hilft. Cheers.

+0

Anscheinend war ich auf dem richtigen Weg, ich musste einfach die Bedingungen für die Schleife ändern. – HecticHiccups

0

for(int i = n-1; n-1 >= 0; i--)

Hier hast du einen Fehler mit dem Zustand Ihrer for Schleife. Sie haben n-1 bis i und im Dekremente Abschnitt i-- zugewiesen. Sie sollten also eine Bedingung verwenden, wenn die Schleife gestoppt werden soll oder für welchen Wert von i Ihre Schleife stoppt. Also, nur die Bedingungen ändern, wie folgend:

for(int i = n-1; i >= 0; i--)