Fişierele text NR1.TXT şi NR2.TXT conţin, separate prin câte un spaţiu, mai multe numere
întregi de cel mult 9 cifre fiecare. Fiecare dintre fişiere conţine cel mult 100 de valori şi
numerele din fiecare fişier sunt ordonate strict crescător. Se cere să se afişeze pe ecran, în
ordine crescătoare, numerele divizibile cu 5 care se găsesc doar în unul din cele două
fişiere.
Exemplu: dacă fişierul NR1.TXT conţine numerele 1 2 3 4 7 20 60, iar fişierul
NR2.TXT conţine numerele 3 5 7 8 9 10 12 20 24, atunci se vor afişa pe ecran
valorile 5 10 60.
Răspunsuri la întrebare
Răspuns de
3
Nu prea vad ca are vreo limita in timp, dar pentru orice eventualitate de ce sa nu folosim cautarea binara, daca totusi vectorii sint ordonati.
Iar pentru inca o efecienta maxima putem sa "jonglam" cu 2 vectori deodata.
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
ifstream fin1("NR1.TXT");
ifstream fin2("NR2.TXT");
int cautare_binara(int a, int b, int v[], int k);
int v1[100],v2[100];
int main()
{
int n=0,m=0,x=0,y=0,i=0,j=0;
while(fin1 >> v1[x++])
n++;
while(fin2 >> v2[y++])
m++;
x=v1[i++];
y=v2[j++];
while(true)
{
while((x<=y or j>m) and i<=n)
{
if(x%5==0 and !cautare_binara(0,m,v2,x))
cout << x << " ";
x=v1[i++];
}
while((y<=x or i>n) and j<=m)
{
if(y%5==0 and !cautare_binara(0,n,v1,y))
cout << y << " ";
y=v2[j++];
}
if(i>n and j>m)
return 0;
}
return 0;
}
int cautare_binara(int a, int b, int v[], int k)
{
int m;
while(a<=b)
{
m=floor((a+b)/2);
if(k==v[m])
return 1;
else
{
if(k>v[m])
a=m+1;
else
b=m-1;
}
}
return 0;
}
Iar pentru inca o efecienta maxima putem sa "jonglam" cu 2 vectori deodata.
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
ifstream fin1("NR1.TXT");
ifstream fin2("NR2.TXT");
int cautare_binara(int a, int b, int v[], int k);
int v1[100],v2[100];
int main()
{
int n=0,m=0,x=0,y=0,i=0,j=0;
while(fin1 >> v1[x++])
n++;
while(fin2 >> v2[y++])
m++;
x=v1[i++];
y=v2[j++];
while(true)
{
while((x<=y or j>m) and i<=n)
{
if(x%5==0 and !cautare_binara(0,m,v2,x))
cout << x << " ";
x=v1[i++];
}
while((y<=x or i>n) and j<=m)
{
if(y%5==0 and !cautare_binara(0,n,v1,y))
cout << y << " ";
y=v2[j++];
}
if(i>n and j>m)
return 0;
}
return 0;
}
int cautare_binara(int a, int b, int v[], int k)
{
int m;
while(a<=b)
{
m=floor((a+b)/2);
if(k==v[m])
return 1;
else
{
if(k>v[m])
a=m+1;
else
b=m-1;
}
}
return 0;
}
stassahul:
Alt ceva mai eficient n-am gasit prin cap :/. In orice caz intrebarea principala este, lucreaza acest program? Caci de verificat am verificat dar e posibil orice caz particular si s-a dus programul.
Alte întrebări interesante
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Chimie,
9 ani în urmă
Limba română,
9 ani în urmă