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
#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;
}
#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;
}
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
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
Matematică,
8 ani în urmă
Chimie,
8 ani în urmă
Franceza,
8 ani în urmă
Chimie,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă