Am o vaga idee ca trebuie utilizat un vector de aparitii, insa nu am habar cum sa ma folosesc de el...
As avea nevoie de ceva ajutor.
Accept orice mod de rezolvare, avand in vedere faptul ca eu sunt totalmente blocata.
Multumesc anticipat.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bac.txt");
int num, m, fr[100], apmax;
int main()
{
while (fin >> num)
{
while (num > 9)
{
m=num%100;
++fr[m];
num=num/10;
}
}
for (num=0; num<100; ++num)
{
if (fr[num]>apmax) apmax=fr[num];
}
cout << "Sub_numere cu aparitie maxima: ";
for (num=0; num<100; ++num)
{
if (fr[num]==apmax)
{
if (num<10) cout << 0;
cout << num << " ";
}
}
}
Explicație:
1. Tr să intueşti că îţi va fi de folos vectorul de frecvenţă. Subnumerele sunt de două cifre, deci selectând acel subnumăr din numerele din fişier tr să le punem în vectorul de frecvenţă. Dimensiunea vectorului de frecvenţă este 100. Deoarece ca subnumere pot fi şi 00, 01, ...09, 10, ...99 e clar că vom parcurge tot vectorul.
2. Cum pescuim acele subnumere? Fie avem dat numarul num= 12121774. E comod să separăm subnumerele începând cu marginea lui din dreapta. Primul subnumăr este 74, care se poate obţine m=num%100 (restul de la împărţirea la 100). acum în vectorul de frecvenţă creştem valoarea lui fr[m]. Deoarece din start în vectorul de frecvenţă sunt zerouri, acum fr[74] va deveni 1, adică 74 este găsit odată. Acum cum găsim următoarele subnumere? Următorul este 77. Din numărul iniţial tr. să eliminăm ultima cifră (4) astfel: num=num/10; Asfel procedăm analog şi actualizăm vectorul de frecvenţă la fiecare subnumăr "pescuit".
3. Găsim cu for apariţia maximă din vectorul de frecvenţă
4. Afişare subnumere cu apariţie maxim. Aici tr. să fim atenţi că e posibil să avem o aparoţie maximă a subnumărului 03 (de exemplu) , dar în vectorul de frecvenţă el are indicele 3. Deacea ân faţa lui 3 tr de afişat un 0.
Sper că am fost explicit... :))) SUCCESE !
Dacă întrebi, răspundem...