cu explicatie
45 de puncte
Răspunsuri la întrebare
Răspuns:
Subpunctul h)
#include <iostream>
using namespace std;
int a[100],n,i;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
/// Citirea vectorului
for(i=1;i<=n/2;i++) /// Se va parcurge doar jumatate din lungimea vectorului
{
int aux=a[i];
a[i]=a[n-i+1]; /// a[n-i+1] este formula prin care se aceseaza elementul simetric din a doua jumatate a vectorului
a[n-i+1]=aux;
}
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
/// Afisarea vectorului
return 0;
}
Subpunctul i)
#include <iostream>
using namespace std;
int a[100],n,i,j,val1,val2;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
/// Citirea vectorului
i=1;
while(i<=n && a[i]%2==0)
i++;
val1=a[i];
/// Aici toata chestia sta in acel while care incepe de la 1 si merge pana la n, in cazul in care nu exista o valoare impara. In val1 se retine prima valoare impara din vector, iar in i ramane pozitia acesteia in vector
j=n;
while(j>=1 &&a[j]%2==0)
j--;
val2=a[j];
/// Acelasi lucru se intampla si la acest while, decat ca incepe de la n si merge pana la 1, iar val2 reprezinta ultima valoare impara din vector
if(val1==0) /// Daca val1 este 0, inseamna ca nu exista vreo valoare impara in vector
cout<<"Vectorul nu are elemente impare";
else
if(i==j) /// Daca i si j sunt egale, inseamna ca exista doar o singura valoare impara, aceasta fiind astfel si pima si ultima
cout<<"Vectorul contine o singura valoarea impara egala cu "<<val1;
else /// Si in final, daca nu se indeplinesc conditiile din if-urile de mai sus, inseamna ca exista cel putin 2 valori impare care se vor afisa
{
cout<<"Prima valoare impara din vector este egala cu "<<val1<<endl;
cout<<"Ultima valoare impara din vector este egala cu "<<val2;
}
return 0;
}
Subpunctul j)
#include <iostream>
using namespace std;
int a[100],n,i,valmin,ap;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
/// Citirea vectorului
valmin=a[1];
ap=1;
/// Pentru inceput, prespunem ca prima valoare este minimul, iar ap care retine aparitiile valorii minime primeste pentru un moment 1
for(i=2;i<=n;i++) /// Vectorul se parcurge acum de la elementul de pe pozitia 2
if(a[i]<valmin) /// Daca se gaseste un element mai mic decat valmin, atunci valmin va primi aceasta valoare, iar ap va primi valoarea 1
{
valmin=a[i];
ap=1;
}
else
if(a[i]==valmin) /// In cazul contrar, daca exista o valoare egala cu valmin, ap va creste cu 1
ap++;
/// Nu ne intereaza daca exista valori mai mari, aceste valori sunt irelevante pentru problema noastra
cout<<"Valoarea minima din vector este de "<<valmin<<" si apare de "<<ap<<" ori.";
return 0;
}
Subpunctul k)
#include <iostream>
using namespace std;
int a[100],k,i,n,s,smax;
int main()
{
cin>>n>>k;
for(i=1;i<=n;i++)
cin>>a[i];
/// Citirea vectorului
for(i=1;i<=k-1;i++)
s+=a[i];
/// Variabila s va fi o variabila auxiliara, care retine o suma intermediara din k elemente de pe pozitii consecutive
for(i=k;i<=n;i++) /// Se va parcurge vectorul de la k la n
{
s+=a[i]; /// Initial, suma pana la aceasta operatie retine suma celor k-1 numere anteriore, la care se adauga numarul de pe pozitia k
if(s>smax)
smax=s;
/// Verificarea si actualizarea smax
s-=a[i-k+1]; /// la final, din s se va elimina primul element care constituie suma. Spre exemplu, daca n=5, k=3 si avem 1 2 3 4 5, dupa ce s era 3, acesta scade la 2 prim eliminarea lui 1 din suma, iar pe urma va devini 5 prin adaugarea lui 3 si algoritmul continua
}
cout<<smax;
return 0;
}
Explicație: