Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    14

    [C++]Calcolare elemento più frequente in un array di n interi

    Buonasera a tutti!

    Sono alle prese con il seguente problema: Dato un'array di N interi, dire qual'è l'elemento che compare con maggior frequenza fra i numeri inseriti. Io ho pensato la seguente soluzione che però non si comporta in output come dovrebbe, ovvero mi restituisce sempre la prima posizione... Potreste aiutarmi indicandomi dove sbaglio??
    codice:
    #include <iostream>
    
    using namespace std;
    
    int main () {
    
        cout << "Inserisci dimensione array: ";
    
        int n;
    
        cin >> n;
    
        int a[n];
    
        cout << "Inserisci elementi array" << endl;
    
        for (int i = 0; i < n; i++){
    
            cin >> a[i];
    
        }
    
        int freq = 0;
    
        int conta = 0;
    
        int piu_freq = 0;
    
        for (int i = 0; i < n; i++){
    
            for (int j = 0; j < n; j++){
    
                if (a[i] == a[j])
    
                    conta++;
    
                    if (conta > freq){
    
                        freq = conta;
    
                        piu_freq = a[i];
    
                    }
    
                    conta = 0;
    
            }
        }
    
    
        cout << "Il piu' frequente e': " << piu_freq << endl;
    
    }
    Vi ringrazio anticipatamente per la pazienza e la cortesia! Scusate la mia inesperienza e gli eventuali errori.

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    if (a[i] == a[j])
    Controlla solo quanti numeri uguali ci sono nell' arrai in posizioni adiacenti, non va bene per risolvere il tuo problema.

    La cosa migliore è prendere carta e penna e pensare a come risolveresti tu il problema,proprio come se fossi una macchina che esegue un algoritmo.
    Allora una soluzione sarebbe di scriverti su un foglio, per ogni numero che appare nell' array una x per ogni volta che leggi quel numero e alla fine contare le x e vedere quale numero ha più x.

    Ti serve un vettore o una lista di appoggio per contare le occorrenze.Sicuramente se lo fai con un vettore il vettore sarà di lunghezza minore o uguale al' array che contiene i valori.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    14
    La soluzione di prendere carta e penna e visualizzare in scrittura le operazioni necessarie è quello che faccio sempre. Sicuramente sbaglio proprio il ragionamento. Grazie per i suggerimenti, cercherò di applicarli.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    14
    Ho risolto l'esercizio e posto il codice per tutti quelli che ne avranno bisogno in futuro.

    La logica utilizzata è basata sull'appoggiarsi a un secondo array, inizialmente riempito di 0,
    di dimensione più grande di 1 del massimo elemento di a[]. Posto il codice così sarà chiaro.
    codice:
    #include <iostream>
    
    using namespace std;
    
    void conta(int a[],int k[],int na,int nk){
    
        for(int i=0;i<nk;i++)
            k[i]=0;
    
        for(int i=0;i<na;i++)
            k[a[i]]++;// nel secondo array alla posizione 2 saranno salvate le occorrenze del 2 e così via
    
    }
    
    int main(){
    
        int k[4];//la dimensione dell'array di appoggio è +1 rispetto al massimo elemento di a[]
    
        int a[]={1,2,3,0,3,3,3,2,1};//Il massimo elemento è 3
    
        conta(a,k,9,4);
    
        for(int i=0;i<4;i++)
            cout << i << ": " << k[i] << "\n";
    
        return 0;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.