Am o mare problemă cu această problemă de informatică:
Fie un șir n de numere întregi. Se cere să se determine secvența cea mai lungă care conține doar numere pozitive. Dacă în șir există mai multe secvențe de aceeași lungime, atunci se va afișa cea care are suma elementelor minimă.
Inițializez variabilele cu 0, citesc elementele vectorului, apoi mă blochez. Cum să fac?
Vă mulțumesc frumos pentru idei sau algoritmi!
artur99:
prima dată setezi un maxl la 0, care să reprezinte lungimea celei mai mari secvențe, apoi pregătești un curentl cu 0 care să fie lungimea curentă
Răspunsuri la întrebare
Răspuns de
2
#include <iostream>
using namespace std;
int main(){
int n, i, t;
int max_lung=0, max_pos=-1, max_sum=0;
int lst_lung=0, lst_pos=-1, lst_sum=0;
cin>>n;
int nr[n];
for(i=0;i<n;i++){
cin>>t;
nr[i] = t;
if(t>0){
//număr pozitiv
if(lst_pos == -1) lst_pos = i;
//dacă este primul din secvență, setăm
//poziția de început a secvenței
lst_lung++;
lst_sum+=t;
}else{
//nu este număr pozitiv, verificăm, resetăm
if(lst_lung>max_lung || lst_lung==max_lung && lst_sum<max_sum){
//dacă ultima secvență citită este
//mai lungă decât cea maximă, sau dacă
//este egală, dar suma mai mică
max_lung = lst_lung;
max_sum = lst_sum;
max_pos = lst_pos;
//setăm secvența curentă ca maxim
}
lst_lung = 0;
lst_sum = 0;
lst_pos = -1;
//resetăm datele, pentru că am început
//o secvență de nr ne-pozitive :))
}
}
//Refacem ultima verificare, în caz că șirul
//s-a terminat cu secvența căutată
if(lst_lung>max_lung || lst_lung==max_lung && lst_sum<max_sum){
max_lung = lst_lung;
max_sum = lst_sum;
max_pos = lst_pos;
}
for(i=max_pos;i<max_pos+max_lung;i++){
cout<<nr[i]<<" ";
}
return 0;
}
using namespace std;
int main(){
int n, i, t;
int max_lung=0, max_pos=-1, max_sum=0;
int lst_lung=0, lst_pos=-1, lst_sum=0;
cin>>n;
int nr[n];
for(i=0;i<n;i++){
cin>>t;
nr[i] = t;
if(t>0){
//număr pozitiv
if(lst_pos == -1) lst_pos = i;
//dacă este primul din secvență, setăm
//poziția de început a secvenței
lst_lung++;
lst_sum+=t;
}else{
//nu este număr pozitiv, verificăm, resetăm
if(lst_lung>max_lung || lst_lung==max_lung && lst_sum<max_sum){
//dacă ultima secvență citită este
//mai lungă decât cea maximă, sau dacă
//este egală, dar suma mai mică
max_lung = lst_lung;
max_sum = lst_sum;
max_pos = lst_pos;
//setăm secvența curentă ca maxim
}
lst_lung = 0;
lst_sum = 0;
lst_pos = -1;
//resetăm datele, pentru că am început
//o secvență de nr ne-pozitive :))
}
}
//Refacem ultima verificare, în caz că șirul
//s-a terminat cu secvența căutată
if(lst_lung>max_lung || lst_lung==max_lung && lst_sum<max_sum){
max_lung = lst_lung;
max_sum = lst_sum;
max_pos = lst_pos;
}
for(i=max_pos;i<max_pos+max_lung;i++){
cout<<nr[i]<<" ";
}
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Geografie,
9 ani în urmă