✨ Úloha 1.6
Napíšte program v jazyku C++ použitím štandardu C++17, ktorý realizuje nasledovnú činnosť.
Program načíta celé číslo n
zo štandardného vstupu, ktoré predstavuje počet prvkov v poli. Následne alokuje dynamické
pole veľkosti n
a načíta do neho n
celých čísel. Program potom nájde najdlhšiu postupnosť po sebe idúcich prvkov,
ktoré sú v neklesajúcom poradí (každý nasledujúci prvok je rovnaký alebo väčší ako predchádzajúci), a vypíše dĺžku tejto
postupnosti.
Príklady vstupov / výstupov programu
Vstup
11
10 5 3 4 4 5 6 2 2 2 3
Výstup
Najdlhšia neklesajúca postupnosť má dĺžku: 4
Rozbaľ pre ukážku riešenia
#include <iostream>
int main() {
int n;
std::cout << "Zadajte počet prvkov v poli: ";
std::cin >> n;
if (n <= 0) {
std::cerr << "Počet prvkov musí byť kladné celé číslo." << std::endl;
return 1;
}
int* pole = new int[n];
std::cout << "Zadajte " << n << " celých čísel:" << std::endl;
for (int i = 0; i < n; ++i) {
std::cin >> pole[i];
}
int max_dlzka = 1;
int aktualna_dlzka = 1;
for (int i = 1; i < n; ++i) {
if (pole[i] >= pole[i - 1]) {
++aktualna_dlzka;
} else {
if (aktualna_dlzka > max_dlzka) {
max_dlzka = aktualna_dlzka;
}
aktualna_dlzka = 1;
}
}
if (aktualna_dlzka > max_dlzka) {
max_dlzka = aktualna_dlzka;
}
std::cout << "Najdlhšia neklesajúca postupnosť má dĺžku: " << max_dlzka << std::endl;
delete[] pole;
return 0;
}
Vysvetlenie
- Načítanie počtu prvkov: Program načíta celé číslo
n
, ktoré určuje počet prvkov v poli. Ak jen
neplatné (napríklad záporné alebo nulové), program vypíše chybové hlásenie a ukončí sa. - Dynamická alokácia poľa: Pomocou operátora
new
program alokuje pole veľkostin
pre celé čísla. - Načítanie prvkov: V cykle
for
program načítan
celých čísel od používateľa a uloží ich do poľa. - Nájdenie najdlhšej neklesajúcej postupnosti:
- Program inicializuje premenné
max_dlzka
aaktualna_dlzka
na 1. - V cykle prechádza pole od druhého prvku po posledný.
- Ak je aktuálny prvok väčší alebo rovný predchádzajúcemu, zvýši
aktualna_dlzka
o 1. - Ak nie, porovná
aktualna_dlzka
smax_dlzka
. Ak jeaktualna_dlzka
väčšia, aktualizujemax_dlzka
. Potom resetujeaktualna_dlzka
na 1. - Po ukončení cyklu ešte raz porovná
aktualna_dlzka
smax_dlzka
pre prípad, že najdlhšia neklesajúca postupnosť bola na konci poľa.
- Program inicializuje premenné
- Výpis výsledku: Program vypíše dĺžku najdlhšej neklesajúcej postupnosti.
- Uvoľnenie pamäte: Na záver program uvoľní dynamicky alokovanú pamäť pomocou operátora
delete[]
.