Informatică, întrebare adresată de cosmaandra2000, 8 ani în urmă

In C++ !
Fişierul bac.txt conţine un şir de cel mult 106
numere naturale distincte din intervalul
[0,109]. Numerele din şir sunt separate prin câte un spaţiu.
Se cere să se determine cei mai mari doi termeni pari din şir care sunt precedaţi de doar
trei termeni impari. Termenii determinați se afișează pe ecran, în ordine strict crescătoare,
separați printr-un spațiu, iar dacă în şir nu există doi astfel de termeni, se afişează pe
ecran mesajul Nu exista.
Pentru determinarea termenilor ceruţi se utilizează un algoritm eficient din punctul de
vedere al spațiului de memorie şi al timpului de executare.
Exemplu: dacă fişierul conţine numerele
4 3 5 312 27 30 14 212 11 15 17 400
se afişează pe ecran numerele
30 212
(4 este precedat de 0 numere impare, 312 este precedat de 2 numere impare, 30, 14 și
212 sunt precedate de 3 numere impare, iar 400 este precedat de 6 numere impare;
dintre numerele 30, 14 și 212 cele mai mari sunt 30 și 212).


grigore2018: Da
boiustef: Succese la redactarea codului în C++ ... :)))
grigore2018: : ) sintaxa la C++ este mai complicata,de aceea il cam ocolesc,nu prea il folosesc in scrierea programelor
boiustef: dar tebuie.... :)))
boiustef: pare complicat ce nu bine cunoşti, după părerea se schimbă
boiustef: eu in februarie 2018 am scris primul cod în C++
grigore2018: Am scris dar nustiu pe cat de corect este am sa-l adaug in comentarii
grigore2018: #include < iostream >
#include < fstream >
#include < cmath >
using namespace std;

int v[10];
int main(){
ifstream f("bac.txt");
int n,a,n,i,s=0,dummy,numere[100];
double sum=-1;
f>>n;
while(f>>a){
n=0;
while(a>1){
n++;
a=a/2;
}
v[n]++;
}
for(i=9;i>=0;i--){
if(v[i]>0){
s++;
}
if(s==n){
sum=pow(2,i);
break;
}
}
if(rezultat==-1){
cout<<"Imposibil";
}
else{
cout<<"Rezultatul este :"<}
return 0;
}
grigore2018: #include < iostream >
#include < fstream >
#include < cmath >
using namespace std;

int v[10];
int main(){

ifstream f("bac.txt");
int n,a,n,i,s=0,dummy,numere[100];
double sum=-1;
f>>n;
while(f>>a){
n=0;
while(a>1){
n++;
a=a/2;
}
v[n]++;
}

for(i=9;i > =0;i--){
if(v[i]>0){
s++;
}
if(s==n){
sum=pow(2,i);
break;
}
}
if(sum==-1){
cout<<"Imposibil";
}
else{
cout < <"Rezultatul este :" < < sum;
}
return 0;
}
boiustef: ceva nu e clar în enunţ...
Fişierul bac.txt conţine un şir de cel mult 106 numere naturale distincte din intervalul [0,109].
Totuşi fişierul conţine cel mult 106 numere sau 10^6 ş intervalul e [0,10^9] ?????

Răspunsuri la întrebare

Răspuns de boiustef
2

Răspuns:

Explicație:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("bac.txt");

int num, i, k, imp, pare[107], j;

int main()

{

   while (f >> num)

   {

       if (num%2==1)

       {

           ++imp;

       }

       else

       {

           if (imp==3)

           {

               ++k; pare[k]=num;

           }

       }

   }

   if (k<2) cout << "nu exista";

   else

   {

       for (i=1; i<k; ++i)

       {

           for (j=i+1; j<=k; ++j)

               if (pare[i]>pare[j]) swap(pare[i],pare[j]);

       }

      cout << pare[k-1] << " " << pare[k];

   }

}

Alte întrebări interesante