Algorithme qui élimine les chiffre répétés
Bonsoir les gars,c'est ma 1ere année en informatique et j'ai un un algorithme à faire que je ne peux plus solver.bref,il dit comme suivant:
Écrivez un algorithme qui permet de d'éliminer les chiffres dans un nombre N de tel sorte que par ex
Si N=132236 ,M sera égale à : 1326
Ou par ex si N=2032502➡ M=2035
Ou même si N= 666➡M=6
Merci d'avance
Algorithme qui élimine les chiffre répétés
Bonjour, :D
Les exemples donnés:
Citation:
Envoyé par
Aso05
... Si N=132236 ,M sera égale à : 1326
Ou par ex si N=2032502➡ M=2035
Ou même si N= 666➡M=6 ...
suggèrent un accroissement progressif à partir du premier chiffre à partir de la gauche. Les chaînes de caractères se prêtent à une telle évolution, par le procédé de concaténation. Sais-tu l'employer ?
Ce serait il est vrai une manière un peu hypocrite :mrgreen: de contourner l'exclusion des tableaux; et sans doute trop compliqué.(1)
Les opérations de l'arithmétique (quotient et reste de la division euclidienne) permettent probablement de définir une double suite (An, Bn), en partant de la puissance de dix (D0 < 1010) immédiatement inférieure au nombre considéré (N).
Exemple: N = 15788452 , conduisant au résultat: N' = 157842 :
Code:
1 2 3 4 5 6 7
| N = 15788452 D0 = 10^7
A0 = 1 = N DIV D0 R0 = 5788452 = N MOD D0 D1 = D0 DIV 10 ... B0 = 1
A1 = 5 = R0 MOD D1 R1 = 788452 = R0 MOD D1 D2 = D1 DIV 10 ... B1 = 15
A2 = 7 = R1 DIV D2 R2 = 88452 = R1 MOD D2 D3 = D2 DIV 10 ... B2 = 157 |
Les indices montrent simplement la succession des valeurs des variables entières (Ai, Ri, Di, Bi).
La difficulté commence à la seconde ligne, lors du passage conditionnel à la nouvelle valeur de (B2); c'est là qu'intervient le jeu de 10 variables (P0, P1, ... P9) initialisées à l'unité, et progressivement augmentées, par l'intervention de l'instruction CASE:
Code:
1 2 3 4 5
|
CASE A OF 0: P0:= 11 * P0;
1: P1:= 11 * P1;
2: P2:= 11 * P2; ...
9: P9:= 11 * P9 END; |
Dès le renouvellement d'un chiffre donné (Pi = 112) - et seulement dans ce cas - la somme
S = P0 + P1 + P2 + ... +P9 dépasse 120.
Là, je crois que j'en ai trop dit, et que cela va produire de légères contrariétés :furieux:
(1) Remarque écrite sans malice: je n'avais pas lu la contribution d'anapurna
Algorithme qui élimine les chiffre répétés
Citation:
Envoyé par
anapurna
... tu ne tiens pas compte de l'ordre d'apparition des chiffres
l'exemple N=132236 ne donnera pas 1326 mais 1236
et N=2032502 ne donneras pas 2035 mais 0235
j'avoue que ma première proposition avec les tableaux n'en tenait pas compte non plus et par conséquent n'était pas correcte ...
Ton idée constitue une piste tout à fait utilisable.
L'instruction à choix multiples CASE sélectionne les valeurs dans l'ordre où elles se présentent, donc dans le sens dextrograde de la lecture.
Pour reprendre ton exemple (N = 132236 , D0 = 105):
Code:
1 2 3 4 5 6 7 8 9
|
A R D S B
1 32236 10000 11+9 = 20 1
3 2236 1000 2*11+8 = 30 1*10+3 = 13
2 236 100 3*11+7 = 40 13*10+2 = 132
2 36 10 11^2+2*11+6 = 149 132 (pas de modification)
3 6 1 11^2+2*11+6 = 149 132 (pas de modification)
6 0 0 4*11+6 = 50 1326 |
Il y a effectivement une erreur: le contrôle ne doit pas s'effectuer sur (A), mais sur la valeur précédente de (B) associée au nouveau chiffre, soit (10*Bn-1 + c).
Le mieux (ou le moindre mal) est de définir à part une fonction Somme(B, c). Merci de m'avoir incité à reprendre ce détail.
Citation:
Envoyé par
anapurna
... wixmania ...
Non. Wiwaxia :D