Trouver le Mode de Vecteur d'Entiers en C++
Donc je suis en train de faire un programme de base pour apprendre les bases du C++, je suis de la génération de 100 nombres aléatoires de 0 à 100 et de les stocker dans un vecteur, je suis ensuite l'affichage de la somme, la moyenne, la médiane, le mode, haut et bas du vecteur. J'ai tout fait sauf la mode qui est l'endroit où je suis coincé. Voici le code que j'ai jusqu'ici.
int modeFunction()
{
numMode = 0;
count = 0;
for (int n = 0; n < 100; n++)
{
for (int y = 0; y < 100; y++)
{
if (numVector.at(y) == numVector.at(n))
{
numMode = numVector.at(y);
count++;
}
}
}
return numMode;
}
Après que je me retrouve bloqué parce que dans mon esprit qu'il convient de travail, mais il ne le fait pas. Il vient de sortir met le dernier numéro, généralement 100. Toute aide serait grandement appréciée.
si
la différence étant que
Ah, merci pour cette friandise. 🙂 Ne vous embêtez pas avec
pour être honnête, je n'ai jamais utiliser
myVector
est un std::vector<int>
(on dirait que c'atleast), vous pouvez indexer un tableau: myVector[y]
et myVector[n]
donnera le même que le myVector.at
version, mais c'est plus agréable à mon humble avis. 🙂la différence étant que
at
a défini le comportement lorsque l'index est hors de portée. Sans doute operator[]
est un micro-optimisation, même si comme vous le dites c'est aussi un peu un style de différence.Ah, merci pour cette friandise. 🙂 Ne vous embêtez pas avec
at
encore, mais un tableau normal aussi a un comportement indéterminé pour hors de portée d'accès, mais il est certainement agréable d'avoir défini comportements quand vous en avez besoin. 🙂pour être honnête, je n'ai jamais utiliser
at
moi-même. Je me demande parfois si je ne devrais pas, mais dans la pratique je n'ai jamais écrire de code que je veux lancer une exception lorsque l'index est en dehors des limites, donc il ne sert que de débogage aider, il "devrait" ne jamais se produire. En dépit de l'appeler un micro-optimisation, c'est un montant raisonnable de code redondant, donc au final si je veux une vérification de limites je viens de passer à Python 😉
OriginalL'auteur Cistoran | 2011-03-25
Vous devez vous connecter pour publier un commentaire.
depuis toutes les valeurs sont comprises entre 0 et 100, vous pouvez trouver le mode efficacement avec un histogramme:
OriginalL'auteur bmcnett
Puisque la mode est le nombre qui se produit plus fréquemment que vous ne devriez pas changer
numMode
à moins que le nouveau numéro du compteur est supérieure ànumMode
'comte.EDIT: Pour clarifier, vous avez besoin de garder un décompte de l'élément en cours et le nombre actuel que vous pensez est la mode. Idéalement, le réglage de
newMode
le premier élément est une bonne approche.En outre, le mode n'est pas nécessaire unique (c'est à dire "1 1 2 2"). Vous pouvez garder cela à l'esprit si vous vous souciez de cela.
OriginalL'auteur nevets1219
Votre algorithme est faux - il des sorties le dernier numéro dans le tableau parce que c'est tout ce qu'il peut faire. Chaque fois que le numéro d'index
y
correspond au numéro d'indexn
- vous remplacer les résultats de la précédenten
. Depuis que vous utilisez la même boucle conditions,y
etn
sont toujours la même à au moins un point dans la boucle imbriquée pour chaquen
valeur - et vous vous retrouvez toujours avecnumMode
êtrenumVector.at(99)
.Vous avez besoin de changer votre algorithme pour enregistrer le nombre de chaque
n
index le long de la voie (ou au moins quin
index a terminé avec le plus grandcount
), de sorte que vous pouvez savoir à la fin de lan
boucle dont la saisie a eu lieu la plupart du temps.OriginalL'auteur Carl Norum
De solutions alternatives. Note: pas testé.
OriginalL'auteur ronag
bmcnett approche fonctionne très bien si nombre d'éléments sont assez petites. Si vous avez un grand nombre d'éléments, mais le tout élément de valeur sont dans une petite plage à l'aide de la carte/hashmap fonctionne bien. Quelque chose comme
OriginalL'auteur jbp
Mode signifie un nombre avec la fréquence la plus élevée. La logique devrait être -
OriginalL'auteur Mahesh