PDA

View Full Version : [C++]Probleme diverse - vectori



~Wolf~
19-03-2020, 12:37 PM
Probleme diverse cu vectori

Sursa:pbinfo (<b>You have to register to ba able to see this link</b>)


Se dă un şir cu n elemente, numere naturale. Să se verifice dacă toate elementele şirului sunt pare.

#include <iostream>
using namespace std;
unsigned int n,i;
bool par=true;
int main()
{
cin>>n;
int v[n];
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n;i++)
{
if(v[i]%2!=0) //algoritmul e simplu, daca gasim un element care nu este par dam valoarea lui par=false si intrerupem secventa
{
par=false;
break;
}
}
if(par==true)
cout<<"DA";
else
cout<<"NU";
return 0;
}


Se dă un vector cu n elemente numere naturale. Să se verifice dacă toate elementele vectorului sunt diferite două cāte două.

#include <iostream>
using namespace std;
int n,i,j;
bool ok=false;
int main()
{
cin>>n;
int v[n];
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n-1;i++) //folosim 2 structuri for pentru a lua elementele 2 cate 2
{
for(j=i+1;j<n;j++)
{
if(v[i]==v[j])//ne intrebam daca 2 elemente sunt egale, astfel vom da valoarea de adevar lui ok si intrerupem for-ul
{
ok=true;
break;
}
}
}
if(ok)
cout<<"NU";
else
cout<<"DA";
return 0;
}



Se dă un vector cu n elemente numere naturale. Să se verifice dacă are elementele ordonate crescător.

#include <iostream>
using namespace std;
int n,i;
bool ok=true;
int main()
{
cin>>n;
int v[n];
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n-1;i++)
//ne intrebam daca elementul curent este mai mare decat urmatorul; daca este adevarat inseamna
//ca elementele nu sunt in ordine crescatoare, asa ca adresam valoarea de fals variabilei ok si
//intrerupem structura
if(v[i]>v[i+1])
{
ok=false;
break;
}
if(ok==true)
cout<<"DA";
else
cout<<"NU";
return 0;
}


*thanks for idea @~JoK3r~ * ^^

B14D3
19-03-2020, 08:41 PM
N-ai idee cat de mult ne-ai ajutat pe astia de a 9a =)).
Imi place modul in care le-ai facut , puteai sa faci codul mai scurt printr-o comanda (scurteaza "for") dar nu am caietul la mine si nu o tin minte , dar sigur o sa le folosesc contra profului la problemele cu vectori.
Bun post , foarte folositor , desii ai putea sa explici .
"De ce facem asta" si "Cum o facem" , cel putin n-ar strica un pic de tutor in timp ce nu prea facem scoala , eu as aprecia asta cel putin .

~Wolf~
19-03-2020, 09:58 PM
N-ai idee cat de mult ne-ai ajutat pe astia de a 9a =)).
Imi place modul in care le-ai facut , puteai sa faci codul mai scurt printr-o comanda (scurteaza "for") dar nu am caietul la mine si nu o tin minte , dar sigur o sa le folosesc contra profului la problemele cu vectori.
Bun post , foarte folositor , desii ai putea sa explici .
"De ce facem asta" si "Cum o facem" , cel putin n-ar strica un pic de tutor in timp ce nu prea facem scoala , eu as aprecia asta cel putin .

Apreciez feedback-ul.Ma incurajeaza sa imi continui treaba si chiar imi da un boost de moral :) .

Nu stiu exact despre ce scurtare spui(sau cel putin la care problema), insa am zis sa fac si eu un post fara explicatii si fix atunci ma articulati :)) .Foarte bine imi faceti.Maine cum intru pe forum voi edita cu explicatiile necesare(desi majoritatea sunt deja stiute daca se viziteaza celelalte topicuri) si voi mai posta cateva probleme.Nu ma tine sufletul sa trec la matrici inca ^^

~Wolf~
20-03-2020, 04:43 PM
Se dă un vector cu n elemente numere naturale. Să se verifice dacă toate elementele vectorului sunt egale.

#include <iostream>
using namespace std;
int n,m;
bool ok=true;
int main()
{
cin>>n;
int v[n];
for(int i=0;i<n;i++)
cin>>v[i];
m=v[0];
for(int i=1;i<n;i++)
{
if(v[i]!=m)
{
ok=false;
break;
}
}
if(ok==false)
cout<<"NU";
else
cout<<"DA";
return 0;
}



Se dă un şir cu n elemente, numere īntregi. Să se verifice dacă elementele pare din şir sunt ordonate crescător.

#include <iostream>
using namespace std;
int n,i,elm,ant;
bool ok=true;
int main()
{
cin>>n;
int v[n];
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n;i++)
{
if(v[i]%2==0) //cautam elementele pare
{
//in if-ul acesta ne luam primul element si ne asiguram ca nu le vom lua si pe celelalte
//astfel, valoarea initiala a lui elm este 0(declarare globala)
//daca gasim un element par si, de asemenea, elm=0, inseamna ca v[i] este primul element par
//si schimbam valoarea lui elm in 1 pentru a nu accesa si celelalte elemente pare(fiindca e inutil)
if(elm==0)
{
ant=v[i];
elm=1;
}
//in urmatorul if ne intrebam daca se respecta ordinea crescatoare
//daca nu se respecta dam valoarea false lui ok si intrerupem structura
if(v[i]<ant)
{
ok=false;
break;
}
//aici dam lui ant valoarea elementului pe care l-am prelucrat deja
//pentru a efectua comparatia de mai sus
ant=v[i];
}
}
if(ok)
cout<<"DA";
else
cout<<"NU";
return 0;
}


Orice şir se īncadrează īn următoarele categorii: șir constant, șir strict crescător, șir crescător, șir strict descrescător, șir descrescător sau șir neordonat.

Se citește un șir cu n elemente naturale. Să se verifice īn ce categorie se īncadrează. (problema #1320)

*mie imi da 80 de puncte desi programul e foarte corect si eficient; daca cineva gaseste un caz particular unde da un rezultat gresit va rog sa-mi spuneti
*stiu ca puteam face cu un switch dar imi place mai mult asa

#include <iostream>
using namespace std;

unsigned int n,i;

bool sir_constant=true;
bool sir_strict_crescator=true;
bool sir_crescator=true;
bool sir_strict_descrescator=true;
bool sir_descrescator=true;
bool sir_neordonat=true;

int main()
{
cin>>n;
if(n==1)
{
cout<<"sir constant";
return 0;
}
unsigned int v[n];
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n-1;i++)
{
if(v[i]!=v[i+1])
sir_constant=false;
if(v[i]!=v[i+1]-1)
sir_strict_crescator=false;
if(v[i]>v[i+1])
sir_crescator=false;
if(v[i]!=v[i+1]+1)
sir_strict_descrescator=false;
if(v[i]<v[i+1])
sir_descrescator=false;
}
if(sir_constant==true)
cout<<"sir constant";
else if(sir_strict_crescator==true)
cout<<"sir strict crescator";
else if(sir_crescator==true)
cout<<"sir crescator";
else if(sir_strict_descrescator==true)
cout<<"sir strict descrescator";
else if(sir_descrescator==true)
cout<<"sir descrescator";
else
cout<<"sir neordonat";
return 0;
}