Cerința De-a lungul bulevardului sunt n copaci, numerotați de la 1 la n, pentru fiecare cunoscându-se înălțimea, exprimată în centimetri. Primarul dorește să taie copacii și apelează la un vrăjitor care va proceda astfel: alege o secvență cât mai lungă de copaci învecinați și aplică o vrajă prin care toți înălțimea tuturor copacilor din secvență scade cu o aceeași valoare, strict pozitivă. Să se determine care este numărul minim de vrăji care trebuie aplicate astfel încât toți copacii să aibă înălțime zero. Date de intrare Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând înălțimile copacilor. Date de ieșire Programul va afișa pe ecran numărul C, reprezentând numărul minim de vrăji necesare. Restricții și precizări 1 ≤ n ≤ 1000 înălțimile arborilor sunt numere naturale nenule mai mici decât 1000000 secvența aleasă de vrăjitor la un moment dat nu poate conține copaci de înălțime zero Exemplu Intrare 5 5 2 3 5 3 Ieșire 4 Explicație prima vrajă se aplică pe întreg șirul de copaci (secvența 1 - 5) și micșorează toți copacii cu 2. Șirul devine: 3 0 1 3 1. a doua vrajă se aplică pe secvența 1 - 1) și micșorează copacii din secvență cu 3. Șirul devine: 0 0 1 3 1. a treia vrajă se aplică pe secvența 3 - 5) și micșorează copacii din secvență cu 1. Șirul devine: 0 0 0 2 0. a patra vrajă se aplică pe secvența 4 - 4) și micșorează copacii din secvență cu 2. Șirul devine: 0 0 0 0 0.
Răspunsuri la întrebare
Răspuns de
2
Aici ai ceva de munca.
Iti citesti n si sirul de numere.
Vom folosi o bucla infinita, un while true, din care vom iesi cu o alta instructiune cand e nevoie.
La inceputul fiecarui while vom folosi o variabila sa verificam daca mai exista copaci mai mari ca 0, daca NU mai exista atunci am temrinat, si deci setam variabila la valoarea corespunzatoare si apoi folosind un if ca sa verificam daca variabila a mai gasit sau nu copaci, iesim sau nu din while.
Bun, ne-am asigurat ca programul verifica daca si-a terminat sau nu treaba, acum sa il punem sa fi FACA treaba aia :))
Numim o secventa(sequence, sau seq), o serie de copaci MAI MARI CA 0, care sunt unul dupa altul.
Spre ex: 151 0 174 0 8 are 3 secvente pentru ca sunt 3 "padurici" de copaci cu cate unul sau mai multi copaci taiati(0) intre ele.
Vom incepe sa cautam prima secventa folosind doua variabile, pentru indicele la care incepe secventa si cate elemente are in total. Asta vom face cu un for si cateva if-uri.
Apoi avand seq_start si seq_len, cu un for vom parcurge DOAR acea secventa de copaci si il vom gasi pe cel cu inaltime minima, deci nr minim din secventa aia.
Apoi parcurgem iar cu un for DOAR secventa aia, si scurtam fiecare copac exact cu inaltimea acelui copac minim. Deci copacul minim va deveni 0.
Am facut un program ceva mai lung si mai detaliata ca sa intelegi ce si cum. Iti va afisa si la fiecare taiere ce secventa taie (adica incepand de la ce pozitie si cati copaci lungime are secventa) si cu CAT taie, cat si sirul de copaci:
Iti citesti n si sirul de numere.
Vom folosi o bucla infinita, un while true, din care vom iesi cu o alta instructiune cand e nevoie.
La inceputul fiecarui while vom folosi o variabila sa verificam daca mai exista copaci mai mari ca 0, daca NU mai exista atunci am temrinat, si deci setam variabila la valoarea corespunzatoare si apoi folosind un if ca sa verificam daca variabila a mai gasit sau nu copaci, iesim sau nu din while.
Bun, ne-am asigurat ca programul verifica daca si-a terminat sau nu treaba, acum sa il punem sa fi FACA treaba aia :))
Numim o secventa(sequence, sau seq), o serie de copaci MAI MARI CA 0, care sunt unul dupa altul.
Spre ex: 151 0 174 0 8 are 3 secvente pentru ca sunt 3 "padurici" de copaci cu cate unul sau mai multi copaci taiati(0) intre ele.
Vom incepe sa cautam prima secventa folosind doua variabile, pentru indicele la care incepe secventa si cate elemente are in total. Asta vom face cu un for si cateva if-uri.
Apoi avand seq_start si seq_len, cu un for vom parcurge DOAR acea secventa de copaci si il vom gasi pe cel cu inaltime minima, deci nr minim din secventa aia.
Apoi parcurgem iar cu un for DOAR secventa aia, si scurtam fiecare copac exact cu inaltimea acelui copac minim. Deci copacul minim va deveni 0.
Am facut un program ceva mai lung si mai detaliata ca sa intelegi ce si cum. Iti va afisa si la fiecare taiere ce secventa taie (adica incepand de la ce pozitie si cati copaci lungime are secventa) si cu CAT taie, cat si sirul de copaci:
Anexe:
mateibarbaov4vk2:
multumesc
Alte întrebări interesante
Istorie,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Engleza,
9 ani în urmă
Matematică,
9 ani în urmă