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.
Răspunsuri la întrebare
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