cu explicatie
50 de puncte

Răspunsuri la întrebare
Răspuns:
a.)
#include <iostream>
using namespace std;
int n,a[301],i,lmax,l;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
/// Citirea vectorului
for(i=1;i<=n;i++) /// Parcurgerea vectorului
{
if(a[i]%2!=0 && a[i]<0) /// Daca elementul este negativ si impar, atunci variabila l creste cu 1, altfel se reseteaza la 0
l++;
else
l=0;
if(l>lmax) /// Daca valoarea lui l este mai mare decat lmax, lmax va primi valoarea lui l
lmax=l;
}
cout<<lmax;
return 0;
}
b.)
#include <iostream>
using namespace std;
int a[301],n,i,nr;
float ma;
int cifra_de_control(int a) /// Subprogramul care determina cifra de control a unui numar a (Pe scurt sua cifrelor pana cand acesta este mai mica decat 10 ex: pt a=30, cifra de control este 3, pt a=98 initail cifra de control este 17, dar pt ca 17>10, se va mai apela odata functia iar la final va returna 8=1+7
{
int s=0;
while(a>0)
{
s+=a%10;
a/=10;
}
if(s>9)
return cifra_de_control(s);
else
return s;
}
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
/// Citirea vectorului
for(i=1;i<=n;i++) /// Parcurgerea vectorului
if(cifra_de_control(a[i])==i%10) /// Daca cifra de control a componentei este egala cu ultima cifra a pozitiei, atunci nr va creste cu 1, iar la variabila ma se adauga a[i]
{
ma+=a[i];
nr++;
}
ma/=nr; /// Am folosit float pt variabila ma pentru a face la final aceasta operatie in loc sa declaram o variabila in plus
cout<<ma;
return 0;
}
c.)
#include <iostream>
using namespace std;
int a[301],n,i,val1,val2,val3;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
/// Citirea vectorului
i=n; /// Vom parcurge vectorul de la coada la cap
while(i>=1 && val3==0) /// Conditia de parcurge a vectorului este ca i sa fie mai mare sau egal cu 1, iar val3 sa fie 0, adica nu s-au gasit cel putin 3 valori
{
if(a[i]%2==0) /// Daca gasim un element par, atunci variabilele val1,val2 si val3 se vor acutaliza in acesta ordine: Prima data val1, daca este 0, in cazul contrar, val2 primeste o val daca este 0, altfel, val3 primeste 0
{
if(val1==0)
val1=a[i];
else
if(val2==0)
val2=a[i];
else
val3=a[i];
}
i--; /// Conditia ca while-ul sa nu se blocheze
}
if(val3==0) /// Daca val3 este 0 inseamna ca nu exista cel putin 3 valori pare, asa ca vom afisa valori insuficiente, iar in caz contrar, se vor afisa aceste valori in ordinea precizata in program
cout<<"Valori insuficiente";
else
cout<<val1<<" "<<val2<<" "<<val3;
return 0;
}
d.)
#include <iostream>
using namespace std;
int n,i;
char a[301];
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
/// Citirea vectorului
i=n; /// Vom parcurge vectorul de la n
if(n%2==0) /// Vom face operatii diferite in functie de paritatea lui n
{
while(i>=n/2+1 && a[i-n/2]==a[i]) /// Se parcurge vectorul daca i este in a doua jumatate a vectorului si a[i] si a[i-n/2] adica componenta corespunzatoare din prima jumatate sunt egale
i--;
if(i<n/2+1) /// Daca i a ajuns in prima jumatate, atunci inseamna ca vectorul este simetric
cout<<"DA";
else
cout<<"NU";
}
else
{
/// Acelasi lucru se intampla si aici, decat ca elementul complementar este a[i-(n+1)/2+1]
while(i>=(n+1)/2+1 && a[i-(n+1)/2]==a[i])
i--;
if(i<(n+1)/2+1)
cout<<"DA";
else
cout<<"NU";
}
return 0;
}
Explicație: