Informatică, întrebare adresată de piticuPORNO1234, 9 ani în urmă

#include<iostream>using namespace std;int b[100],x,i,n,k;int main(){cin>>n>>b[1];int p=1; for(i=2;i<=n;i++) {cin>>x; k=1; while(x<=b[k] && k<=p) k++; if(k==p+1) p++; b[k]=x; } for(i=1;i<=p;i++) cout<<b[i]<<' '; return 0;}
ce face acest program?? 
pls help

Răspunsuri la întrebare

Răspuns de blindseeker90
1
Acest program afiseaza toate numerele din sirul citit de la tastatura care sunt mai mici decat termenii unui al doilea sir in care sunt memorati. primul termen din sirul initial este intotdeauna memorat, urmand ca ceilalti termeni sa fie afisati doar daca sunt mai mici decat toti termenii din sirul care este scris.

Sa presupunem ca am avea urmatoarele date:
n=6
vectorul initial de date: 11 8 10 4 6 3
primul termen din sir este memorat, deci avem b[1]=11
trecem la urmatorul termen este 8<11? Da, atunci introducem in sir
b[2]=8
Sirul b devine b:11,8
vine acum termenul 10. Este 10<11? Da. Dar pentru a fi adaugat in sir, trebuie sa fie mai mic decat toti termenii din sir. este 10<8? Nu, atunci trecem peste el
Acum avem 4. Este 4<11? Da este 4<8? Da, atunci ajunge in sir b[3]=4
sirul b devine: 11 8 4
mai sunt 2 termeni ramasi: 6 peste care trecem, si 3 care este mai mic decat toti termenii deci adaugam in sir.

sirul b va arata la final: 11 8 4 3

piticuPORNO1234: dar cu n=7
piticuPORNO1234: iar numerele din vector fiind: 3,5,6,4,8,9,2
piticuPORNO1234: ce ar trebui sa afiseze?
blindseeker90: Secventa finala ar trebui sa fie 7 3 2. 7 este primul termen. Este 3 mai mic decat 7? Da, atunci este inclus. 5,6,4 sunt mai mari decat 3, deci nu sunt incluse, 8 si 9 sunt mai mari decat 7 si 3, deci nu sunt incluse, 2 este mai mic decat ambele, deci este inclus.
blindseeker90: stai scuza-ma, am citit ca 7 este primul numar din serie
blindseeker90: Secventa finala ar trebui sa fie 3 2. Din acelasi motive: toate cifrele de dupa 3 sunt mai mari decat 3 in afara de 2, care atunci este adaugat la sir si afisat apoi in rezultatul final
blindseeker90: Nu stiu daca este buna solutia mea daca ma uit mai bine. Eu am considerat ca if(k==p+1) {p++; b[k]=x;} adica avem conditia b[k]=x doar daca valoarea lui k a atins-o pe cea de final. Dar la tine nu par sa mai fie inca un set de acolade, doar creste valoarea lui p cand e indeplinita conditia. Dar ar fi prea bizar in acel caz, chiar nu as sti ce face programul. Sper ca este corect cum am vazut initial: sunt 2 conditii indeplinite la if
piticuPORNO1234: imi pare rau, dar rezultatul final la acel exemplu era 9 4 2...
Alte întrebări interesante