Ma ajutati cu aceasta problema?? Nu stiu cum sa salvez pozitia fara sa folosesc ceva vector. Ma gandesc sa fac cu frecventa v[9]={0} , dar la faza cu pozitia nu prea am idee..
Fișierul bac.in conține un șir de cel mult 106 numere naturale din intervalul [0,109], separate prin câte un spațiu. Se cere să se afișeze pe ecran pozițiile din șir pe care se află termeni precedați de un număr maxim de valori care au cifra unităților egală cu cifra unităților lor. Numerele afișate sunt separate prin câte un spațiu. Proiectați un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fișierul bac.in conține numerele 112 12 5 25 88 15 2 19 32 179 35 621
pe ecran se afișează numerele de mai jos (termenii 32, respectiv 35 respectă proprietatea cerută):
9 11
Răspunsuri la întrebare
Răspuns de
1
Răspuns:
La problema asta ma gandesc si eu , iti recomand sa nu folosesti un vector , algoritmul trebuie sa fie liniar , pt ca la bac problma asta trebuie sa fie eficienta din punct de vedere al timpului de executie si al memoriei.. pe scurt nu ai cum sa folosesti un vector sau un for in for sau cv de genu
Explicație:
{
while(fin>>x)
{
x=x%10;
v[x]++;
if(v[x]>Max)
Max=v[x];
}
for(i=0;i<=9;i++)
if(v[i]==Max)
cout<}
Alte întrebări interesante
Limba română,
8 ani în urmă
Arte,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Engleza,
9 ani în urmă
#include
using namespace std;
ifstream f("bac.in");
int vf[10], vp[10], i, x, Max, k;
int main()
{
k = 0;
while (f >> x)
{
k++;
vf[x % 10]++;
vp[x % 10] = k;
}
Max = 0;
for (i = 0; i <= 9; i++)
if (vf[i] > Max)
Max = vf[i];
for (i = 0; i <= 9; i++)
if (vf[i] == Max)
cout << vp[i] << " ";
return 0;
}