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

O rezolvare fara vector frecventa de aparitie se poate? Voiam prima data sa ordonez crescator numerele fara dubluri dar nu stiu cum sa ma intorc la ele dupa sa aflu r-ul si nu as vrea sa fac cu vector.

Anexe:

boiustef: de ce nu cu vector nu de frecvenţă, ci caracteristic? e destul de eficient...

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("bac.in");

int num, i, v[1001], exista,r;

int main()

{

   while (f >> num)

   {

       v[num]=1;

   }

   num=0;

   while (v[num]==0 && num<1001) ++num;

   i=num+1;

   while (v[i]==0 && i<1001) ++i;

   if (i<1001)

   {

       exista=1;

       r=i-num;

       num=i;

       for (i=num+1; i<1001; ++i)

       {

           if (v[i]==1)

           {

               if ((i-num)!=r) { exista=0; break; }

               num=i;

           }

       }

   }

   if (exista) cout << r;

   else cout << "NU";

}

Explicație:

creăm vectorul caracterisic v, punem în el 1 pe poziţia din vector, egală cu numărul citit. Căutăm primul termen în vector, pentru care v[num]=1. căutăm al doilea termen şi aflăm r. Cu un for verificăm dacă diferenţele dintre două numere (pentru care în vector sunt unităţi) este r


august08: multumesc nu stiam aceasta metoda!
boiustef: viaţa prin asta e şi interesantă, că ni se întâmplă ceva de prima dată... :))), succese!
Alte întrebări interesante