(aa serait l'un des nombreux, bb ne le ferait pas)
Je pensais que ce serait 10! / 8! Mais apparemment, je fais quelque chose de mal. Quelqu'un peut-il m'aider parce que je suis perplexe.
(aa serait l'un des nombreux, bb ne le ferait pas)
Je pensais que ce serait 10! / 8! Mais apparemment, je fais quelque chose de mal. Quelqu'un peut-il m'aider parce que je suis perplexe.
Réponses:
Vous avez 6 lettres différentes: a, b, c, d, e, f à partir desquelles vous pouvez générer 6 x 5 = 30 mots avec deux lettres différentes. De plus, vous pouvez générer deux fois les 3 mots aa, cc, dd avec la même lettre. Donc, le nombre total de mots est de 30 + 3 = 33.
Une alternative à la méthode de Zahava: il existe façons d'appairer deux des lettres af. Cependant, il n'y a pas 2 caractères b, e ou f, donc "bb", "ee" et "ff" ne sont pas possibles, ce qui fait que le nombre de mots 36 - 3 = 33 .
La façon dont vous avez essayé d'aborder le problème semble ignorer le fait qu'il n'y a pas 10 lettres distinctes. Si vous aviez 10 lettres distinctes, votre réponse serait correcte.
Si vous ne pouvez pas le raisonner de manière "intelligente", cela vaut souvent la peine d'essayer la force brute. Imaginez que vous essayez d'écrire une liste alphabétique de tous les mots que vous pouvez créer.
Combien peuvent commencer par "A"? Eh bien, "A" peut être suivi de A, B, C, D, E ou F, c'est donc six façons.
Combien peuvent commencer par "B"? Cela peut être suivi par A, C, D, E ou F, qui ne sont que cinq voies, car il n'y a pas de deuxième "B".
Combien peuvent commencer par "C"? Étant donné que "C" apparaît trois fois dans votre liste, il peut être suivi par lui-même ou par l'une des cinq autres lettres, de même que pour "A", il existe six façons. Notez que nous n'obtenons aucun moyen "supplémentaire" simplement parce que "C" apparaît plus de fois que "A"; quoi que ce soit au-delà d'une seconde apparence est redondant.
J'espère qu'il est maintenant clair que chaque lettre qui n'apparaît qu'une seule fois dans votre liste peut apparaître au début de cinq mots, et les lettres qui apparaissent deux fois ou plus peuvent apparaître au début de six mots. Les lettres qui n'apparaissent qu'une seule fois sont "B", "E" et "F", chacune pouvant être au début de cinq mots, ce qui fait 5 + 5 + 5 = 15 mots. Les lettres qui apparaissent deux fois ou plus sont "A", "C" et "D", chacune pouvant être au début de six mots, ce qui fait 6 + 6 + 6 = 18 mots. Au total, il y a 15 + 18 = 33 mots.
C'est plus long que les autres méthodes, mais en essayant de réfléchir à la réponse de cette manière systématique, vous avez peut-être pu «repérer» l'une des méthodes les plus rapides.
Notez que si cela avait été formulé comme une question de probabilité, votre première inclinaison aurait pu être de dessiner un diagramme d'arbre . Cela aurait commencé avec six branches pour la première lettre, mais pour la deuxième lettre, il y aurait eu six branches provenant de "A", "C" et "D" (parce qu'elles peuvent être suivies par n'importe laquelle des six lettres) mais seulement cinq branches sortant de "B", "E" et "F" (car elles ne peuvent pas être suivies par elles-mêmes). Ce modèle de ramification est effectivement le même que dans ma réponse, mais vous préférerez peut-être y penser plus visuellement dans un arbre.
D'un point de vue mathématique, la solution est l'ensemble des éléments du produit cartésien entre la liste et lui-même une fois enlevé la diagonale. Vous pouvez résoudre ce problème en utilisant cet algorithme:
Un ensemble est une collection bien définie d'objets distincts, donc les objets ne sont pas répétés.
from itertools import product
import numpy as np
letters = list("aabcccddef")
cartesianproduct = np.array(["".join(i) for i in product(letters,letters)]).reshape(10,10)
cartesianproduct
Out :
array([['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['ba', 'ba', 'bb', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ee', 'ef'],
['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe', 'ff']],
dtype='|S2')
On enlève la diagonale
diagremv = np.array([ np.delete(arr,index) for index,arr in enumerate(cartesianproduct)])
diagremv
array([['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['ba', 'ba', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ef'],
['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe']],
dtype='|S2')
Nous calculons la longueur de l'ensemble des éléments:
len(set(list(diagremv.flatten())))
Out: 33
Je pense que la raison pour laquelle certains pensent que la question n'est pas claire est qu'elle utilise le terme «mots de 2 lettres». Étant donné la façon dont tout le monde aborde une solution, ils interprètent tous les «mots de 2 lettres» pour signifier quelque chose comme des «paires de lettres». En tant que passionné de Scrabble, j'ai immédiatement compris que la question signifiait: "Combien de mots légitimes de 2 lettres peuvent être créés à partir de ces lettres?" Et cette réponse est - 12! Du moins, selon la dernière édition du Dictionnaire officiel des joueurs de Scrabble (OSPD5). Les mots sont aa, ab, ad, ae, ba, be, da, de, ed, ef, fa et fe. (Veuillez garder à l'esprit que le fait que vous n'ayez jamais entendu parler de beaucoup de ces mots ne nie pas leur validité!); O)
Juste mon "2 sens".
Encore une autre façon de compter sans force brute:
Si la première lettre est a, c ou d, il reste 6 choix distincts pour la deuxième lettre.
Mais si la première lettre est b, e ou f, il ne reste que 5 choix distincts pour la deuxième lettre.
mots distincts de deux lettres.
Il y a un problème dans la façon dont vous posez votre question. Quelles actions sont réellement autorisées sur la ligne "aabcccddef" pour prendre un mot de 2 lettres? Pouvons-nous remplacer ces derniers ou ne traverser que les inutiles? J'ai trouvé deux réponses possibles en fonction de ces conditions:
1) Si nous pouvons remplacer les lettres de quelque façon que ce soit, la réponse est 33 comme il est mentionné précédemment. 30 paires de lettres différentes (6 * 5) et 3 paires de lettres similaires.
2) Si nous ne pouvons pas changer les lettres et ne pouvons que croiser, nous obtiendrons beaucoup moins de réponses. Comptons du début à la fin. En commençant par "a" nous avons 6 lettres pour être deuxième, en commençant par "b" c'est seulement 4. "c" a aussi 4, "d" - 3 et "e" - 1. C'est 18 totalement.
ma réponse à la question: combien de mots de 2 lettres pouvez-vous obtenir de aabcccddef
* // Le point est que la question se lit, "les mots" et non les combinaisons de paires. En utilisant des mots, la lettre devrait apparaître deux fois pour utiliser le mot plus d'une fois, par exemple, il y a deux de la lettre 'a' et deux de la lettre 'd' donc il est possible d'écrire 'ad' comme mot deux fois.
[self-study]
balise et lire son wiki .