Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- /*
- * probleme in rezolvarea scrisa de tine:
- 1. reinitializai k=0 pentru fiecare element din vector
- * ex: v = 4 4 4 4
- * i=0: k=0, v[1]==v[2] => k=1;
- * i=1: k=0, v[2]==v[3] => k=1; etc.
- * => k trebuie initializat inaintea for-ului pentru fiecare parcurgere
- 2. mergeai cu i=1,n si comparai in if un v[i-1] cu v[i]. pe pozitia i=1, comparai un v[0] cu v[1], v[0] nefiind o valoare citita
- de tine (citirea o aveai cu i=1,n). am ales sa compar mai degraba orice element cu vecinul din dreapta, asa cum facem si la sortari, si sa merg cu i=1,n-1
- * hint: o alta optiune ar fi sa punem noi manual pe v[0] valoarea lui v[1], si sa mergem cum ai pus initial, cu i=1,n, if(v[i-1]==v[i]),
- * si conditia de sir const/cresc/etc. ar fi k==n
- 3. fiecare tip de sir la tine nu il excludea pe celalalt, a se observa ca eu am pus totul intr-o structura if else if else if ...
- ruland programul tau pe un exemplu am vazut ca imi afisa ca e si constant si crescator si neordonat, ceea ce ar fi imposibil
- Explicatie rezolvare:
- pentru fiecare parcurgere am mers cu i=1,n-1, am comparat elementul v[i] cu v[i+1] (vecinul din dreapta) si am numarat elementele care respectau conditia
- comparand cu elementul din dreapta, parcurgeam pana la penultimul element care era comparat cu ultimul element din vector.
- la final, daca toate elementele respectau conditia, k-ul era n-1, deoarece nu intram decat de n-1 ori sa verific elementele, ultimul intrand
- in verificarea penultimului element (ex. 10 11 12 13 14, parcurg cu i=1,4, voi compara 10 cu 11, 11 cu 12, 12 cu 13, 13 cu 14. cu 4 pasi compar toate 5 elem
- */
- int main()
- {
- int n, v[1001], i, k;
- cin >> n;
- for (i = 1; i <= n; i++)
- cin >> v[i];
- //vom numara cate elemente sunt egale cu vecinul din dreapta, daca sunt n-1 => sir constant
- k = 0; //initializam contorul doar inainte sa intram in parcurgere
- for (i = 1; i <= n - 1; i++)
- {
- //pentru fiecare element, verificam daca este egal cu vecinul din dreapta
- if (v[i] == v[i + 1])
- k++;
- }
- if (k == n - 1)
- cout << "sir constant";
- else
- {
- //vom numara cate elemente sunt mai mari STRICT decat vecinul din dreapta, daca sunt n-1 => sir strict crescator
- k = 0; //la fel, initializam doar inainte de parcurgere
- for (i = 1; i <= n - 1; i++)
- {
- //pentru fiecare element, verificam daca este mai mic STRICT decat vecinul din dreapta
- if (v[i] < v[i + 1])
- k++;
- }
- if (k == n - 1)
- cout << "sir strict crescator";
- else
- {
- //vom numara cate elemente sunt mai mici sau egale decat vecinul din dreapta, daca sunt n-1 => sir crescator (nestrict)
- k = 0;
- for (i = 1; i <= n - 1; i++)
- {
- if (v[i] <= v[i + 1])
- k++;
- }
- if (k == n - 1)
- cout << "sir crescator";
- else
- {
- //vom numara cate elemente sunt mai mari STRICT decat vecinul din dreapta, daca sunt n-1 => sir strict descrescator
- k = 0;
- for (i = 1; i <= n - 1; i++)
- {
- if (v[i] > v[i + 1])
- k++;
- }
- if (k == n - 1)
- cout << "sir strict descrescator";
- else
- {
- //vom numara cate elemente sunt mai mari sau egale decat vecinul din dreapta, daca sunt n-1 => sir descrescator (nestrict)
- k = 0;
- for (i = 1; i <= n - 1; i++)
- if (v[i] >= v[i + 1])
- k++;
- if (k == n - 1)
- cout << "sir descrescator";
- else
- //daca nu respecta nicio alta regula, este neordonat
- cout << "sir neordonat";
- }
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment