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

Fie a un vector cu (n<=50) componente de tip int. Determinati un element din vector care se repeta de cele mai multe ori.
Programul pe care l-am scris il inserez mai jos.
1) Este vreo metoda mai eficienta?
2) Este vreo metoda eficienta pentru a nu verifica valorile care s-au verificat anterior?
(de ex ptu {5, 6, 1, 7, 5, 1, 90, 5, 8} 5 se va verifica de 3 ori) eliminarea tuturor valorilor care s-au verificat si folosirea altui vector in care introducem valorile verificate mi se par cam ineficiente.



#include <iostream.h>
int main()

{
int a[50], i, j, n, val, nr=0, nrmax=0;
cout<<"n="; cin>>n;

  cout<<"Introduceti componentele vectorului:";
    for (i=0; i<n; i++) cin>>a[i];

   for (i=0; i<n; i++)   
   {
      for (j=1; j<n; j++) 
         if (a[i]==a[j]) nr++;
    if (nr>nrmax) nrmax=nr, val=a[i];
    }

cout<<val;  
return 0;
}


artur99: :D mda, afisat iei cu log-ul de la apache :D
AntiEaglesDavids: pt prima idee a ta "extragi toate numele de fisiere, si cu un soft onlin vezi care e cel mai des aparut cuvant" o/un trie e perfect/a pt asa ceva
AntiEaglesDavids: sau doar ai putea folosi doar strcmp
artur99: pai prin numele de fisiere vreau sa zic numele de imagini incarcate
artur99: :D
AntiEaglesDavids: numere sau numele? nu mai inteleg nimic
artur99: =)))))))))))
artur99: deci serverul de http - apace - isi face face log la fiecare download de fisier :D
artur99: eu intru in apache.log si extrag toate liniile unde e vorba despre fisierele imagine(unde gasesc 'numele' lor)
artur99: :D apoi le numar :D

Răspunsuri la întrebare

Răspuns de AntiEaglesDavids
1
#include <iostream>
#include <limits.h>
using namespace std;
const int NMAX = 200000000;

int nr[NMAX];

int main()
{
    int n, x, Max = 0, poz = 1;
    cin >> n;
    for(int i=1; i<=n; i++) {
        cin >> x;
        nr[x]++;
        if(nr[x] >= Max) { Max = nr[x]; poz = x; }
    }
    cout << '\n' << poz << '\n';
}

Si fara vectori :)


AntiEaglesDavids: nice joke
artur99: ia fa varianta ta care sa fct si la nr negative si eu o fac pe a mea :D si vedem care scoate timp mai bun :D
AntiEaglesDavids: ok
AntiEaglesDavids: #include <iostream>
#include <limits.h>
using namespace std;
const int NMAX = 200000000;

int nr[NMAX];
#define nr (nr + 100000000)

int main()
{
int n, x, Max = 0, poz = 1;
cin >> n;
for(int i=1; i<=n; i++) {
cin >> x;
nr[x]++;
if(nr[x] >= Max) { Max = nr[x]; poz = x; }
}
cout << '\n' << poz << '\n';
}
AntiEaglesDavids: gata
AntiEaglesDavids: randu tau
artur99: stai ca la mine dureaza oleaca :D
AntiEaglesDavids: oricum a mea e mai rapida deci n-are rost :D
artur99: no :D
artur99: si la 200000001 nu mai merge :D
Răspuns de artur99
1
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
    int n, i, max_pos=-1, max_count=-1, tmp1, tmp2, tmp3;
    cin>>n;int a[n];
    for (i=0;i<n;i++) cin>>a[i];
    sort(a, a+n);
    for(i=0;i<n;i++){
        tmp1=i+1;
        tmp2=i;//poz curenta
        tmp3=1;//nr de nr gasite
        while(a[i]==a[tmp1]){
            tmp3++;
            tmp1++;
        }
        if(tmp3>max_count){
            max_pos=tmp2;
            max_count=tmp3;
        }
        i=tmp1-1;
    }
    cout<<a[max_pos];
    return 0;
}
Alte întrebări interesante