Napisz program, który zamieni miejscami elementy znajdujące się w pierwszej i drugiej połowie tablicy o parzystej liczbie elementów. Program nie powinien używać dodatkowej tablicy pomocniczej. Chodzi mi o jak najprostszą wersję prostą do wytłumaczenia i omówienia



Odpowiedź :

Rekah4

Odpowiedź:

#include <iostream>

using namespace std;

int main() {

 // określamy rozmiar tablicy

 const int SIZE = 10;

 // uzupełniamy tablicę arr

 int arr[SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

 // poniższą czynność powtarzamy dokładnie 5 razy dla tablicy 10cio elementowej

 for (int j = 0; j < SIZE / 2; j++) {

   // zapisujemy ostatni element, przyda nam się na koniec przesuwania

   int last = arr[SIZE - 1];

   // przesuwamy całą tablicę jeden raz w prawo

   // i od 9 do 1 (nie do 0!)

   for (int i = SIZE - 1; i > 0; i--) {

     // przenosimy element z indeksu N do indeksu N-1

     // czyli pod arr[9] wkladamy wartość z arr[8]

     // pod arr[8] wartość z arr[7]

     arr[i] = arr[i - 1];

   }

   // ostatni element tablicy czyli arr[9] przypisujemy do arr[0]

   arr[0] = last;

 }

 // Wyświetlamy wynik:

 for (int &e : arr) {

   cout << e << " ";

 }

 return 0;

}

Wynik:

wartość wejściowa: 0 1 2 3 4 5 6 7 8 9

wartość wyjściowa: 5 6 7 8 9 0 1 2 3 4

Wyjaśnienie:

Sposób na zasadzie przesuwania elementów tablicy w prawo.

iteracje zmiennej j:

0: 0 1 2 3 4 5 6 7 8 9

-----------------------------

1: 9 0 1 2 3 4 5 6 7 8

2: 8 9 0 1 2 3 4 5 6 7

3: 7 8 9 0 1 2 3 4 5 6

4: 6 7 8 9 0 1 2 3 4 5

5: 5 6 7 8 9 0 1 2 3 4