0
votes

Comment imprimer des combinaisons en double en C

J'ai stocké dans un tableau une séquence de combinaisons par exemple:

{"hé", "salut", "bonjour"}

Et je dois tamponner toutes les combinaisons, par exemple:

  1. {hey, salut, bonjour}

  2. {hey, hey, hey}

  3. {bonjour, salut, hi}

    etc ... et jusqu'à présent ici est facile à utiliser la rampe, mais mon problème est:

    Je ne peux pas tamponner les combinaisons en double, comme par exemple:

    1. {hey, salut, bonjour}

    2. {salut, bonjour, hey}

      Comment vous voyez la position de chaque valeur est différente mais il y a les mêmes mots dans ces combinaisons.

      Comment puis-je supprimer ces combinaisons en double? Des idées?

      Juste pour faire plus clair ma question:

      Si j'ai ce tableau: {"HI", "Hey"}, ce sont les valeurs que je peux imprimer:

      1. salut, hey
      2. Salut, Salut
      3. hey, hey
      4. HI
      5. hey

        Je ne peux pas imprimer ces valeurs:

        1. Hey, hi (parce que est déjà là la combinaison: Salut, Hey)
c

20 commentaires

Que diriez-vous de la combinaison des combinaisons, stockez-les dans un ordre de tri. Donc, lorsque vous faites une nouvelle combinaison, vérifiez simplement si ce vecteur existe dans l'ensemble.


Cet ensemble est défini dans la langue C? jamais entendu parler de ça


J'ai essayé mais de cette façon, d'autres bonnes solutions sont ignorées


En Combinatorics, cela est décrit comme partitionnement de l'entier N dans une somme de m entiers, où n est le nombre d'éléments de chaque "combinaison" et m est le nombre de "combinaisons" dans votre séquence initiale. (Vos exemples ont 3 pour N et M, mais ils ne doivent pas être les mêmes en général, et votre description de votre problème ne précise pas si elles doivent être pour votre problème spécifique.) (Incidemment, évitez d'utiliser le mot " Combinaison "Pour cela; dans des contextes comme celui-ci, ce terme est utilisé ou un but différent en mathématiques.)


Je suis désolé je n'ai trouvé aucun autre moyen de mieux l'expliquer


Configurez des compteurs M dans un tableau C . Concevez un processus pour les introduire: exécutez le premier, dites c [0] de 0 à n, inclus. Pour chaque valeur du premier, exécutez le second de 0 à 0 à N-C [0] , inclus. Pour chaque valeur du second, exécutez le troisième de 0 à N-C [0] -C [1] , inclus. La valeur du dernier sera déterminée; C'est n moins la somme des valeurs précédentes. Chaque ensemble de valeurs de ces compteurs détermine un résultat à imprimer: Imprimer c [0] des instances de la première "combinaison", c [1] de la suivante et bientôt.


Je vais essayer de mettre en œuvre cela dans la fonction de retour arrière


Quelle sera la longueur maximale du tableau ??


La longueur est définie au début, il peut s'agir de la valeur que vous voulez


Si la longueur maximale du tableau est n, vous voulez simplement générer toutes les combinaisons possibles de longueur N, non ?? En outre, la position des éléments n'a pas d'importance?


Quelle est la valeur maximale que vous allez mettre de la longueur dans votre cas d'utilisation?


Veuillez lire à nouveau l'exemple de ma question, je ne peux pas expliquer mieux de ça


plutôt que de trouver un moyen de supprimer les duplicats, ne les créez pas, car cela ne change pas l'ordre des éléments


Je ne crée rien, je n'ai pas seulement à les imprimer (merci à nouveau Bruno pour ma dernière question XD)


Est-ce que cela répond à votre question? Combinations d'éléments dans un tableau


@wovano non parce que ce temps il est possible de dupliquer chaque élément


@wovano dans votre lien il n'est pas autorisé à avoir 1 1 1 ni même 1 1 2 mais ici c'est possible


Ah, d'accord, tu as raison à ce sujet @bruno (alors j'ai rétracté mon drapeau en double). Le terme "combinaisons" dans le titre était un peu trompeur, IMHO, puisque dans la signification classique (par exemple, lorsque vous parlez de combinaisons et de permutations), c'est différent.


Je ne connais aucun autre mandat pour le définir désolé xD


@Kkkkk, moi ni ...


4 Réponses :


0
votes

Que diriez-vous de cette approche pour générer vos matrices requises.

considère que le nouveau tableau généré aura 'x' hellos, 'y' son et son et > 'z' heys. (Nous envisageons leurs comptes parce que leur position dans la matrice résultante n'a pas d'importance pour nous).

Maintenant, nous connaissons la longueur de la matrice que nous voulons générer / trouver est 3.

Par conséquent, nous avons,

x + y + z = 3

Notre problème est maintenant réduit pour trouver simplement des valeurs appropriées de x, y et z qui satisferont l'équation ci-dessus.

Nous pouvons facilement faire cela en utilisant trois pour les boucles xxx

espère que cela aide. S'il vous plaît laissez-moi savoir si une partie n'est pas claire.


2 commentaires

Merci pour vos efforts, mais cette solution ne fonctionnerait jamais car j'utilise un moyen de recul pour résoudre le problème et si je change les valeurs de la matrice avec: {"Hey", "Bonjour", "Bye"} Cette solution elle deviendrait obsolète. Merci quand même :)


Votre code est dans C ++ et la question ne contient pas de balise C ++ .



1
votes

Je suppose que tous les éléments de la matrice sont différents.

Pour avoir dupliquer, il est nécessaire de modifier l'ordre des éléments lors de l'impression, puis de ne pas avoir dupliquer qu'il suffit de laisser les éléments en ordre. < / p>

Un moyen de faire peut être: xxx

compilation et exécutions: xxx


0 commentaires

-1
votes

Le code ci-dessous donnera le résultat que vous vouliez:

(il est écrit en Java, commentant si vous avez besoin d'aide pour le traduire dans le langage C)

résultat: xxx

"algorithme" reconsive utilisé: xxx < P>

Code complet: xxx


1 commentaires

Merci de vos efforts, mais cette solution n'est pas correcte, vous imprimez toutes les combinaisons même les duplicats que je ne veux pas :(, de toute façon c'est Java, mon problème est sur le langage C: '). Merci quand même



0
votes

Une implémentation simple xxx

note : le dernier élément du tableau mots doit être défini sur null Avant d'appeler le combine . Ce n'est pas nécessaire dans ce cas car argv [argc] est un pointeur NULL au démarrage du programme.


Test: xxx


0 commentaires