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

Cerinţa
Se dau n numere naturale. Să se determine ultimele două numere impare, nu neapărat distincte, dintre cele date.
Date de intrare
Programul citeşte de la tastatură numărul n, apoi n numere naturale, dispuse pe mai multe linii.
Date de ieşire
Programul afişează pe ecran ultimele două numere impare dintre cele date, în ordinea în care au fost citite. Dacă nu au fost citite suficiente numere impare, se va afişa doar mesajul Numere insuficiente.
Restricţii şi precizări
0 < n <= 10.000 cele n numere citite vor avea cel mult 9 cifre
Exemplu
Date de intrare
8 12 15 68 13 17 90 31 42
Date de ieşire
17 31

Răspunsuri la întrebare

Răspuns de blindseeker90
0
Te mai poti folosi de alta proprietate a numerelor pare si impare pentru a descoperi ultimele 2 numere impare
impar+impar=par
par+impar=impar
Deci observi ca un numar impar schimba paritatea numarului la care este adunat
Asa ca putem incepe cu o suma s=0 si adunam termeni din coada sirului de numere. Daca suma nou obtinuta are paritate diferita de cea veche, atunci inseamna ca am trecut peste un numar impar. 
Codul e mai jos.

#include <iostream>
using namespace std;

int main()
{
int n,i,schimbari_paritate=0,ultimul_impar,s=0;
cin>>n;
int v[n];
for(i=0;i<n;i++){
cin>>v[i];
}
i=n-1;
while(schimbari_paritate<2){
if(s%2!=(s+v[i])%2){
if(schimbari_paritate==0){
ultimul_impar=v[i];
}
else{
cout<<v[i]<<" ";
}
schimbari_paritate++;
}
s=s+v[i];
i--;
}
cout<<ultimul_impar;
return 0;
}
Alte întrebări interesante