2010-02-20 8 views
1

Pouvez-vous me donner un indice sur la façon de calculer s'il y a deux modes ou plus dans c?Calculez tous les modes dans c

j'ai pu créer un programme qui calculera pour le mode, mais si j'ai un ensemble de données avec plusieurs modes, comme 5,3,1,2,3,4,6,4 mon programme ne trouve que 3 en tant que mode, plutôt que les deux 3 et 4.

+2

Comment calculez-vous le mode? –

Répondre

3

une approche pourrait aller quelque chose comme ceci:

  1. Déterminer combien de fois chaque valeur apparaît, garder une liste
  2. Déterminer le nombre maximum de fois une valeur apparaît (en regardant votre liste)
  3. Trouver toutes les valeurs ce ap poire le nombre maximum de fois (en regardant votre liste)
+0

merci beaucoup :) je l'ai eu ", – user244775

0

Vous venez de vous rendre compte que vous êtes limité à C .. devinez que cette réponse ne fonctionne pas alors.

Cela devrait faire ce que vous voulez (je pense .. je ne l'ai pas essayé).

std::vector<int> calculateModes(std::vector<int> input) 
{ 
    std::sort(input.begin(), input.end()); 
    std::vector<int> modes; 
    int lastModeCount = 0; 
    std::vector<int>::const_iterator cursor = input.begin(); 
    while(cursor < input.end()) 
    { 
     std::vector<int>::const_iterator endOfRun 
      = std::find_if(cursor, input.end(), 
      std::not1(std::bind2nd(std::equal_to<int>(), *cursor))); 
     int modeCount = std::distance(cursor, endOfRun); 
     if (modeCount > lastModeCount) 
     { 
      modes.clear(); 
      modes.push_back(*cursor); 
     } 
     else if (modeCount == lastModeCount) 
      modes.push_back(*cursor); 
     cursor = endOfRun + 1; 
    } 
    return modes; 
} 
Questions connexes