#include<stdio.h>
#include<conio.h>
main()
{
int i,j,k,x,y,n=4,a[]={1,2,3,4}; //n is the length of the array
for(i=0;i<n;i++)
{
for(k=0;k<(n-2);k++)
{
for(j=(n-1-k);j>=1;j--)
{
y=a[j];
a[j]=a[j-1];
a[j-1]=y;
for(x=0;x<n;x++)
{
printf("%d",a[x]);
}
printf("\t");
}
}
}
getch();
}
Répondre
Modifier ceci:
for(k=0;k<(n-2);k++)
à ceci:
for(k=0;k<(n-1);k++)
Aussi, essayez d'utiliser des noms de variables descriptives plus ..
qui ne fixe pas l'algorithme. 24 résultats ne signifient pas 24 résultats corrects. –
Précisément. L'algorithme est faux, simplement parce qu'il ne produit évidemment pas les temps 'n! – avakar
Je sais que l'algorithme du demandeur n'est pas correct, mais il ne demandait pas d'exactitude; il nous demandait de trouver le "bug" qui générait 20 permutations au lieu de 24, ce que j'ai fait. Pour tout ce que je sais, il a une très bonne raison de vouloir utiliser cet algorithme particulier. –
Du matériel supplémentaire (je suis un peu bourré, je vais probablement devoir rééditer ça demain, alors prenez-le avec un grain de sel):
Knuth et Sedgewick ont tous deux couvert les permutations il y a des éons.
Jetez un oeil à: http://www.princeton.edu/~rblee/ELE572Papers/p137-sedgewick.pdf
Pour n articles que vous avez n! permutations, donc pour 13 éléments, vous avez déjà 6 227 020 800 permutations. Donc, créer toutes les permutations pour un grand nombre d'objets deviendra vite impossible.
Il existe fondamentalement deux ensembles d'algorithmes permettant de créer des permutations, des classements/exclusions et des méthodes de changement incrémentiel.
Avec le classement/l'exclusion, vous avez deux méthodes classées et non classées. Rank vous donnera la position d'une permutation dans l'ordre de génération.
Unrank vous donnera la permutation qui est à entier m, avec 0> = m = < n! et n le nombre d'éléments pour lesquels vous souhaitez créer des permutations.
Ceci est utile pour une variété de cas tels que:
Création d'une permutation aléatoire (vous suffit de créer un nombre aléatoire de 0 à n et appelez unrank (randomNumber)!) Et obtenez la permutation à randomNumber position.
Création de séquences, obtention de la permutation suivante: Vous avez une permutation p et appelez Rank (p) puis Unrank (rang + 1).
méthodes de changement progressif:
Ceux-ci fonctionnent essentiellement grâce à l'échange et sont plus efficaces que le classement/unranking:
De wikipedia, génération non numérotée:
function permutation(k, s) {
for j = 2 to length(s) {
swap s[(k mod j) + 1] with s[j]; // note that our array is indexed starting at 1
k := k/j; // integer division cuts off the remainder
}
return s;
}
Je ne sais pas le point de votre programme, mais vous pouvez essayer de lire l'implémentation de std :: next_permutation. Générer toutes les permutations avec des boucles est un peu difficile et je préfère utiliser la récursivité.
+1, bien que je ne pense pas qu'un débutant en C sera heureux d'analyser du code C++ basé sur des templates utilisant des itérateurs. Il y a, cependant, un bel article sur 'next_permutation': http://marknelson.us/2002/03/01/next-permutation/ – avakar
- 1. Comportement de la Viewbox que je ne peux pas comprendre
- 2. Je n'arrive pas à comprendre pourquoi je ne peux pas mettre en forme ce texte
- 3. Pourquoi je ne peux pas utiliser mon serveur apache?
- 4. Calcul des permutations en F #
- 5. Je ne trouve pas la faute de frappe dans mon code syntaxhighlighter. Peux tu le repérer?
- 6. Je ne peux pas obtenir mon débogueur pour arrêter de rompre sur les exceptions de la première chance
- 7. Je peux lire mais ne pas mettre les cookies dans mon application rails
- 8. Pourquoi ne puis-je pas obtenir mon objet CDatabase pour comprendre mon nom de source de données?
- 9. Activator.CreateInstance - Expliquez-donc je peux comprendre
- 10. Je ne trouve pas mon erreur dans ce programme de schéma pour calculer PI
- 11. Je ne peux pas définir IHTMLEventObj2 :: fromElement
- 12. Makefile ne peut pas comprendre les commentaires
- 13. Que dois-je faire ou ne pas faire pour éviter le bug "push dword" de Delphi?
- 14. C# - Je sais que je peux le faire dans LINQ, mais je ne peux pas le faire fonctionner
- 15. Je ne peux pas obtenir Domain.count() méthode statique pour travailler
- 16. Après les grails nettoyer je ne peux pas courir-app
- 17. Existe-t-il un package php que je peux utiliser pour gérer les demandes de programme?
- 18. Je ne peux pas installer les gemmes qui dépendent de la houe
- 19. Python os.forkpty pourquoi je ne peux pas le faire fonctionner
- 20. Je peux ajouter mon webpart personnalisé, mais je ne peux pas modifier un webpart sur la page
- 21. Je ne peux pas accéder aux fichiers dans IIS 6
- 22. J'ai une boucle qui fonctionne dans localhost mais pas dans le site Web en direct. Je ne peux pas comprendre pourquoi
- 23. Je ne peux pas obtenir le résultat de recherche pour la recherche ajax formulaire
- 24. Je ne peux pas lire la balise silverlight dans IE!
- 25. Je ne peux même pas installer seulement xcode de l'iphone sdk sur mon Mac OSX 10.4
- 26. Toutes les raisons pour lesquelles je ne peux pas accéder à une instance de SQL 2005
- 27. Odd Internet Explorer 7 bug; pas de calcul de remplissage sur les liens correctement
- 28. Java Web Services API, mais je ne peux pas exécuter une JVM sur mon serveur
- 29. J'ai une mystérieuse erreur PHP SOAP sur mon hôte, mais je ne peux pas dupliquer localement
- 30. ne peut pas comprendre les erreurs de type à Scala
Je pense que quelque chose s'est mal passé lorsque vous avez soumis votre question. Le formatage est foiré et il manque du code. Pouvez-vous résoudre votre question? – Lucas
yup je suppose que je l'ai réparé –
Souciez-vous expliquer ce qu'est le bug? – Toad