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ź:
#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