Algorithme de Kaprekar
+3
manianis
Anissou
Napoléon
7 participants
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: Algorithmes célèbres
Page 1 sur 1
Algorithme de Kaprekar
Algorithme de Kaprekar
J'en profite pour lancer un Topic qui concerne
l'algorithme Kaprekar.
J'espère que tout le monde en profite.
Salut
Je n'arrive pas à résoudre cette énigme.
- Prenons un nombre de trois chiffres distincts, par exemple 748,
- Ecrivons les deux nombres obtenus en rangeant ses chiffres par ordre décroissant : 874 et par ordre croissant : 478.
- Effectuons la différence : 874 - 478 = 396
- Recommençons la même opération avec 396 : 963 - 369 = 594
- Inutile de poursuivre : à l'évidence on retrouve 495.
Est-ce que
quelque soit le nombre de trois chiffres distincts choisi au départ, l'algorithme que
nous venons de décrire conduit immanquablement à 495 ?
J'en profite pour lancer un Topic qui concerne
l'algorithme Kaprekar.
J'espère que tout le monde en profite.
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7871
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Anissou- Entier Naturel
- Nombre de messages : 1
Localisation : Tunis
Réputation : 0
Points : 6195
Date d'inscription : 07/12/2007
Re: Algorithme de Kaprekar
Soit V la différence ci-dessus max=xyz, min=zyx (x, y, z les chiffres du nombre) :
V = abs(x*100+y*10+z - z*100-y*10-x) = abs(x*100+z - z*100-x)
V = abs(99*z-99*x) = 99*abs(z-x)
n1=abs(z-x) = 1 ; V=099
n2=abs(z-x) = 2 ; V=198
n3=abs(z-x) = 3 ; V=297
n4=abs(z-x) = 4 ; V=396
n5=abs(z-x) = 5 ; V=495
n6=abs(z-x) = 6 ; V=594
n7=abs(z-x) = 7 ; V=693
n8=abs(z-x) = 8 ; V=792
n9=abs(z-x) = 9 ; V=891
La différence entre deux nombre max et min sera toujours une valeur parmi les valeurs cités ci-dessus.
Pour n'importe quelle valeur initiale de trois chiffres distincts on aboutira toujours à 495.
V=099 => (x:9, z:0) => V1=891 => (x:9, z:1) => V2=792 => (x:9, z:2) => V3 = 693 => (x:9, z:3) => V4=594 => (x:9, z:4) => V5=495 => (x:9, z:4) => V6=495
V=198 => (x:9, z:1) => V1=792 => (x:9, z:2) => V2 = 693 => (x:9, z:3) =>
V3=594 => (x:9, z:4) => V4=495 => (x:9, z:4) => V5=495
V=297 => (x:9, z:2) => V1 = 693 => (x:9, z:3) =>
V2=594 => (x:9, z:4) => V3=495 => (x:9, z:4) => V4=495
V=396 => (x:9, z:3) =>
V1=594 => (x:9, z:4) => V2=495 => (x:9, z:4) => V3=495
V=495 => (x:9, z:4) => V1=495 => (x:9, z:4) => V2=495
V = abs(x*100+y*10+z - z*100-y*10-x) = abs(x*100+z - z*100-x)
V = abs(99*z-99*x) = 99*abs(z-x)
n1=abs(z-x) = 1 ; V=099
n2=abs(z-x) = 2 ; V=198
n3=abs(z-x) = 3 ; V=297
n4=abs(z-x) = 4 ; V=396
n5=abs(z-x) = 5 ; V=495
n6=abs(z-x) = 6 ; V=594
n7=abs(z-x) = 7 ; V=693
n8=abs(z-x) = 8 ; V=792
n9=abs(z-x) = 9 ; V=891
La différence entre deux nombre max et min sera toujours une valeur parmi les valeurs cités ci-dessus.
Pour n'importe quelle valeur initiale de trois chiffres distincts on aboutira toujours à 495.
V=099 => (x:9, z:0) => V1=891 => (x:9, z:1) => V2=792 => (x:9, z:2) => V3 = 693 => (x:9, z:3) => V4=594 => (x:9, z:4) => V5=495 => (x:9, z:4) => V6=495
V=198 => (x:9, z:1) => V1=792 => (x:9, z:2) => V2 = 693 => (x:9, z:3) =>
V3=594 => (x:9, z:4) => V4=495 => (x:9, z:4) => V5=495
V=297 => (x:9, z:2) => V1 = 693 => (x:9, z:3) =>
V2=594 => (x:9, z:4) => V3=495 => (x:9, z:4) => V4=495
V=396 => (x:9, z:3) =>
V1=594 => (x:9, z:4) => V2=495 => (x:9, z:4) => V3=495
V=495 => (x:9, z:4) => V1=495 => (x:9, z:4) => V2=495
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Algorithme de Kaprekar
- Code:
program Kaprekar;
var i, v,
u, c, d, aux,
max, min : integer;
begin
for i:=100 to 999 do begin
v := i;
repeat
c := v div 100;
d := (v div 10) mod 10;
u := v mod 10;
if (c = d) and (d = u) then break;
if (d > c) then begin aux:=d; d:=c; c:=aux; end;
if (u > d) then begin aux:=u; u:=d; d:=aux; end;
if (d > c) then begin aux:=d; d:=c; c:=aux; end;
max := c *100 + d * 10 + u;
min := u *100 + d * 10 + c;
v := max - min;
until (v = 495);
if (v = 495) then Write(i,',');
end;
Readln;
end.
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Algorithme de Kaprekar
Soit V la différence ci-dessus
max=xyz, min=zyx (x, y, z les chiffres du nombre) :
V = abs(x*100+y*10+z - z*100-y*10-x) = abs(x*100+z - z*100-x)
V = abs(99*z-99*x) = 99*abs(z-x)
Puisque xyz est l'écriture du plus grand nombre constitué des chiffres x,y,z, alors, on doit avoir x>z, donc, on n'a pas besoin de la valeur absloue.
V = max - min = 99(x-z) > 0.
n1=abs(z-x) = 1 ; V=099
n2=abs(z-x) = 2 ; V=198
n3=abs(z-x) = 3 ; V=297
Il ne faut pas oublier les nombres tels que x=y=z. Dans ce cas,
il faut ajouter n0 = 0.
Merci manianis pour le développement de la solution.
a+
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7871
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Algorithme de Kaprekar
Où a tu remplacer x et z?manianis a écrit:V=099 => (x:9, z:0) => V1=891 => (x:9, z:1) => V2=792 => (x:9, z:2) => V3 = 693 => (x:9, z:3) => V4=594 => (x:9, z:4) => V5=495 => (x:9, z:4) => V6=495
V=198 => (x:9, z:1) => V1=792 => (x:9, z:2) => V2 = 693 => (x:9, z:3) =>
V3=594 => (x:9, z:4) => V4=495 => (x:9, z:4) => V5=495
V=297 => (x:9, z:2) => V1 = 693 => (x:9, z:3) =>
V2=594 => (x:9, z:4) => V3=495 => (x:9, z:4) => V4=495
V=396 => (x:9, z:3) =>
V1=594 => (x:9, z:4) => V2=495 => (x:9, z:4) => V3=495
V=495 => (x:9, z:4) => V1=495 => (x:9, z:4) => V2=495
ihecien- Entier Naturel
-
Nombre de messages : 23
Age : 40
Localisation : Exponentielle
Réputation : 0
Points : 6222
Date d'inscription : 10/11/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Algorithme de Kaprekar
ihecien a écrit:Où a tu remplacer x et z?manianis a écrit:V=099 => (x:9, z:0) => V1=891 => (x:9, z:1) => V2=792 => (x:9, z:2) => V3 = 693 => (x:9, z:3) => V4=594 => (x:9, z:4) => V5=495 => (x:9, z:4) => V6=495
V=198 => (x:9, z:1) => V1=792 => (x:9, z:2) => V2 = 693 => (x:9, z:3) =>
V3=594 => (x:9, z:4) => V4=495 => (x:9, z:4) => V5=495
V=297 => (x:9, z:2) => V1 = 693 => (x:9, z:3) =>
V2=594 => (x:9, z:4) => V3=495 => (x:9, z:4) => V4=495
V=396 => (x:9, z:3) =>
V1=594 => (x:9, z:4) => V2=495 => (x:9, z:4) => V3=495
V=495 => (x:9, z:4) => V1=495 => (x:9, z:4) => V2=495
prenons le 1er cas V=099 donc max=990 et min=099 et donc x=9 et z=0
maintenant on fait la différence maw-min et on trouve V1 et ainsi de suite
suneddine- Nombre Réel
-
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6321
Date d'inscription : 11/11/2007
Feuille de personnage
Capacité linguistique:
(995/1000)
Re: Algorithme de Kaprekar
Merci...mosa a écrit:prenons le 1er cas V=099 donc max=990 et min=099 et donc x=9 et z=0
maintenant on fait la différence maw-min et on trouve V1 et ainsi de suite
ihecien- Entier Naturel
-
Nombre de messages : 23
Age : 40
Localisation : Exponentielle
Réputation : 0
Points : 6222
Date d'inscription : 10/11/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Algorithme de Kaprekar
Admin a écrit:Soit V la différence ci-dessus
max=xyz, min=zyx (x, y, z les chiffres du nombre) :
V = abs(x*100+y*10+z - z*100-y*10-x) = abs(x*100+z - z*100-x)
V = abs(99*z-99*x) = 99*abs(z-x)
Puisque xyz est l'écriture du plus grand nombre constitué des chiffres x,y,z, alors, on doit avoir x>z, donc, on n'a pas besoin de la valeur absloue.
V = max - min = 99(x-z) > 0.
manianis a utilisé abs pour qu'il puisse faire abs(x*100+z - z*100-x)=abs(99*z-99*x)
c'est à dire abs(x)=abs(-x)
n1=abs(z-x) = 1 ; V=099
n2=abs(z-x) = 2 ; V=198
n3=abs(z-x) = 3 ; V=297
Il ne faut pas oublier les nombres tels que x=y=z. Dans ce cas,
il faut ajouter n0 = 0.
Merci manianis pour le développement de la solution.
a+
la condition de l'algorithme est que x<>y<>z
suneddine- Nombre Réel
-
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6321
Date d'inscription : 11/11/2007
Feuille de personnage
Capacité linguistique:
(995/1000)
Re: Algorithme de Kaprekar
mais maintenant il faut justifier l'utilisation de abs, est-elle nécessaire?
suneddine- Nombre Réel
-
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6321
Date d'inscription : 11/11/2007
Feuille de personnage
Capacité linguistique:
(995/1000)
Re: Algorithme de Kaprekar
mosa a écrit:mais maintenant il faut justifier l'utilisation de abs, est-elle nécessaire?
Voir ci-dessus: la valeur absolue n'est pas nécessaire puisque par hypothèse:
1. le nombre est formé des chiffres {x,y,z}
2. le max est de la forme xyz
donc x>z.
Exemple:
Le nombre 537 => max=753 => x=7, y=5 et z=3.
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7871
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Algorithme de Kaprekar
Oui, la valeur absolue est inutile (voir la définition du MAX par manianis).
Mais l'idée de la démonstration est très correcte.
Il y a eu plusieurs travaux de recherche sur ces nombres. Il suffit de voir www.wikipedia.fr
Mais l'idée de la démonstration est très correcte.
Il y a eu plusieurs travaux de recherche sur ces nombres. Il suffit de voir www.wikipedia.fr
informix- Nombre Rationnel
- Nombre de messages : 399
Réputation : 4
Points : 6525
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Algorithme de Kaprekar
Merci pour vos enrichissements à propos de ce sujet. En fait, oui la valeur absolue est inutile dans ce cas.
Vous pourrez deviner que j'avais écrit :
[quote=manianis]
V = abs(x*100+y*10+z - z*100-y*10-x) = abs(x*100+z - z*100-x)
V = abs(99*z-99*x) = 99*abs(z-x)[/quote]
avant d'écrire :
[quote=manianis]Soit V la différence ci-dessus max=xyz, min=zyx (x, y, z les chiffres du nombre) :[/quote]
Vous pourrez deviner que j'avais écrit :
[quote=manianis]
V = abs(x*100+y*10+z - z*100-y*10-x) = abs(x*100+z - z*100-x)
V = abs(99*z-99*x) = 99*abs(z-x)[/quote]
avant d'écrire :
[quote=manianis]Soit V la différence ci-dessus max=xyz, min=zyx (x, y, z les chiffres du nombre) :[/quote]
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
tesnime- Entier Naturel
-
Nombre de messages : 3
Localisation : tébourba
Réputation : 0
Points : 4980
Date d'inscription : 08/04/2011
Sujets similaires
» Algorithme d'un nombre janus
» algorithme
» algorithme
» algorithme équation de la chaleur
» algorithme/pascal
» algorithme
» algorithme
» algorithme équation de la chaleur
» algorithme/pascal
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: Algorithmes célèbres
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum