Algorithme de kaprekar

Description

En mathématiques, l algorithme de Kaprekar est un algorithme découvert en 1949 par le mathématicien indien D.R. Kaprekar pour les nombres de quatre chiffres, mais qui peut être généralisé à tous les nombres.
extrait de wikipedia :
"L algorithme de Kaprekar consiste à associer à un nombre quelconque n un autre nombre K(n) généré de la façon suivante :
On considère les chiffres de n, écrits dans une base quelconque (généralement la base 10). On forme le nombre n1 en arrangeant ces chiffres dans l ordre croissant et le nombre n2 en les arrangeant dans l ordre décroissant.
On pose K(n) = n2 - n1.
On itère ensuite le processus avec K(n)."

Source / Exemple :


#####################################
#      algorithme de Kaprekar       #
#    mickael G - Août 2012 - GPL    #
#####################################

#!/usr/bin/python
# -*-coding:Latin-1 -*

__author__ = "mickael G"
__credits__ = ["mickael G"]
__license__ = "GPL"
__version__ = "1.0"
__maintainer__ = "mickael G"

def arrange(nb, booleen = False):
    return int(''.join(sorted(nb, reverse=booleen)))

print(" l'algorithme de Kaprekar".center(80,'~'))
nb = input("entre le nombre : ")
j=True
x=[]#liste pour verifier qu'il s'agit d'un cycle et non d'un puit
x.append(nb)#on ajoute le premier nombre pour la comparaison
while j:   
    #on traite l'entrée "nb" pour obtenir le nombre croissant
    croissant=arrange(nb)
    # on traite l'entrée "nb" pour obtenir le nombre décroissant
    decroissant = arrange(nb,True)
    #on s'occupe du résultat
    resultat = decroissant -croissant
    if nb == str(resultat):
        print("le puit est {}".format(resultat))
        break #on sort de la boucle si le résultat est égal a "nb" donc un puit
    else:
        print("{0} - {1} = {2}".format(decroissant,croissant, decroissant-croissant))
        nb = str(resultat)
        #on verifie si le nombre se trouve dans la liste, si c'est le cas
        #cela veut dire qu'il s'agit d'une liste
        if nb not in x:
            x.append(nb)
        else:
            print("pas de puit, il s'agit d'un cycle...")
            break

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.