👤

Subprogramul mult, cu doi parametri, primeşte prin intermediul primului parametru, n, un
număr natural nenul cu maximum trei cifre şi prin intermediul celui de-al doilea parametru,
a, un tablou unidimensional având n componente numere naturale cu cel mult 8 cifre
fiecare. Subprogramul returnează valoarea 1 dacă cele n componente ale lui a pot forma o
mulţime şi returnează 0 în caz contrar.
a) Scrieţi definiţia completă a subprogramului mult. (6p.)
b) Fişierul text date.in conţine cel mult 400 de numere naturale având maximum 8 cifre
fiecare. Scrieţi un program C/C++ care, folosind apeluri utile ale subprogramului mult,
afişează pe ecran valoarea maximă k, astfel încât primele k numere succesive din fişier să
poată forma o mulţime.
Exemplu: dacă fişierul date.in conţine
16 17 8 31 8 2 10
atunci se va afişa 4 (deoarece primele patru numere din fişier pot forma o mulţime şi
acesta este cardinalul maxim posibil în condiţiile impuse de enunţul problemei)


Răspuns :

Răspuns:

#include <iostream>

#include <fstream>

#include <bitset>

using namespace std;

ifstream f("date.in");

bitset<100000000>vc;

int k, num;

int main()

{

   while (f >> num)

   {

       if (vc[num]==0) { vc[num]=1; ++k;}

       else break;

   }

   cout << k;

}

********************* cu subprogram ******************

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("date.in");

int nr=-1, num, v[1001], k;

int mult(int n, int a[])

{

   int ok=1;

   for (int i=0; i<n-1; ++i)

   {

       for (int j=i+1; j<n; ++j)

           if (a[i]==a[j])

       {

           ok=0; break;

       }

       if (ok==0) break;

   }

   return ok;

}

int main()

{

   while (f >> num)

   {

       ++nr; v[nr]=num;

   }

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

   {

       if (mult(k,v)==0) break;

   }

   --k;

   cout << k;

}

Explicație:

îţi propun o rezolvare f.scurtă în care folosesc vector caracteristic pe biţi, datele din enunţ permit

- La cerinţele din enunţ mă mai gândesc.. :)))