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

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 stassahul
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;
}


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.
stassahul: La cautarea binara poti folosi din #include <algorithm> binary_search, daca se poate de folosit algorithmul.
Alte întrebări interesante