ehm...scusate la mia inesperienza ma prima di leggere i vostri post avevo provato a farlo in questa maniera: ho creato una matrice di ugale dim e in ogni cella della seconda matrice ho inserito il numero di occorrenze dell'elemento della stessa posizione nella prima matrice.. ad esempio se in mat1[0][0] ho il numero 2 in mat2[0][0] ho il numero di occorrenze di due... naturalmente ciò porta ad avere ridondanza, nel senso che nel caso di valori uguali l'occorrenza sarà memorizzata ogni volta che viene incontrato lo stesso valore...poi ho trovato il max nella seconda matrice e quindi il numero che corrispondeva al max nella prima matrice...
vi posto il codice (non so se ci siano errori):

codice:
int occorre_piu_volte(Tabella t){

int conta(Tabella t,int valore);

    int i,j,max=0,occorre=0;
    Tabella t2={0};
    for (i=0;i<N;i++){
        for (j=0;j<M;j++){
            t2[i][j]=conta(t,t[i][j]);
            if (t2[i][j]>max){
               max=t2[i][j];
               occorre=t[i][j];
            }
        }
    }
    return occorre;
}
        
        
int conta(Tabella t,int valore){
    int i,j,conta=0;
    for (i=0;i<N;i++){
        for (j=0;j<M;j++){
            if (t[i][j]==valore)
               conta++;
        }
    }
    return conta;
}