IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Calculer les nombres d'Armstrong


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Calculer les nombres d'Armstrong
    bounjour a tout svp je veux avoir une solution pour un algo de Armstrong

  2. #2
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Il d'y a pas d'algo d'Amstrong mais un nombre d'Amstrong
    Pour l'obtenir, tu découpe la chaîne en caractères, tu en extrait les valeurs, tu élève les valeurs au cube et tu additionne.
    C'est pas sorcier.
    La question qui se pose, c'est: A quoi peut bien servir une manip pareille.
    Savoir pour comprendre et vice versa.

  3. #3
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Calculer les nombres d'Armstrong
    A quoi peut bien servir une manip pareille.
    À l'entraînement des malheureux débutants en programmation .

    L'énoncé exact du problème consistant en la recherche des entiers égaux à la somme des puissances (c) des (c) chiffres qui les composent, en notation décimale.

    Deux options pour leur recherche, par exemple pour (c = 3):
    a) un balayage simple du domaine, suivi de la décomposition de l'entier considéré n = <ijk> = (100*i) + (10*j) + k
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FOR n:= 100 TO 999 DO 
     ...
    b) trois boucles imbriquées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FOR i:= 1 TO 9 DO
      FOR j:= 0 TO 9 DO
        FOR k:= 0 TO 9 DO ...
    avec vérification de l'égalité: (100*i) + (10*j) + k = i3 + j3 + k3 .

    Les solutions dépendent de la base de numération.
    On rencontre beaucoup de variantes à cet énoncé; le travail mathématique consiste à borner les solutions, afin de ne pas se lancer dans des recherches inutiles.

    Exemple: 145 = 1! + 4! + 5! . Trouver l'autre solution égale à la somme des factorielles de ses chiffres.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  4. #4
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    @: wiwaxia: J'ai trouvé ça;
    " est un entier naturel n non nul qui est égal à la somme des puissances p-ièmes de ses chiffres en base dix, où p désigne le nombre de chiffres de n"
    Avec l'ambiguïté de n qui ici est en même temps le nombre cherché et engendre p.
    Savoir pour comprendre et vice versa.

  5. #5
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Calculer les nombres d'Armstrong
    La seconde référence citée dans l'article de Wikipédia décrit les quatre sortes de nombres d'Armstrong; sous cet aspect la demande de simokhobouz est floue, faute d'indiquer ce qu'il recherche.
    Il s'agit vraisemblablement du cas le plus simple, celui des nombres de quatrième espèce d'ordre (p), vérifiant: n = Sk=1c(dk)p ,
    où (dk) représente le kème chiffre compté à partir de la droite: n = <dcdc-1 ... d2d1> = Sk=1c(10(k-1)*dk) .

    L'article disponible sur MathWorld fournit de nombreuses informations.

    1°) Le problème étudié, ainsi que quelques variantes, relèvent du même algorithme, celui de la recherche d'un entier égal à la somme de (c) termes dépendant chacun du chiffre correspondant: n = Sk=1cF(dk) ;
    la fonction entière en cause pouvant être:
    # F(d) = dp (nombres d'Armstrong de 4me espèce),
    # F(d) = dd (nombres d'Armstrong de 2nde espèce),
    # F(d) = d! (fonction factorielle) ... liste non limitative.
    Il est alors avantageux de calculer une fois pour toutes les 10 valeurs de la fonction, lors de l'initialisation d'une liste de 10 entiers; plusieurs codes sont envisageables, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    VAR F: ARRAY[0..9] OF LongInt;    
     
    FOR k:= 0 TO 9 DO F[k]:= Cube(k);
    La valeur de la fonction est alors directement donnée par F[d].


    2°) Le recours à (c) boucles imbriquées, dans le cas d'un petit nombre de chiffres, paraît le plus facile à mettre en oeuvre, en raison de la simplicité du passage de la séquence de chiffres à l'entier correspondant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    u:= d[c];
    FOR k:= (c - 1) DOWNTO 1 DO BEGIN
                                  v:= 10 * u; u:= v + d[k]
                                END;
    n:= u;
    Le passage inverse semble plus approprié à un nombre quelconque de chiffres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    u:= n;
    FOR k:= 1 TO c DO BEGIN
                        v:= u DIV 10; d[k]:= u MOD 10; u:= v
                      END;
    Il faut comparer les délais d'exécution, et ne pas oublier que l'on se retrouvera face à un mur au-delà d'une dizaine de chiffres.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  6. #6
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Calculer les nombres d'Armstrong
    Dernier détail, last but not least, l'équation n = Sk=1cF(dk), dans laquelle intervient la fonction croissante F(d), admet-elle des solutions entières à (c) chiffres dans la base considérée ?

    L'entier (n) est borné par Nmin = <1000...0> ("1", suivi de (c-1) zéros), soit Nmin = 10(c-1) ,
    et Nmax = <999...9> (c chiffres "9"), soit Nmax = 10c - 1 ;
    la somme S = Sk=1cF(dk) par Smin = F(1) , inférieure aux deux limites précédentes dès que (c>1) ,
    et Smax = F(9) * c , dont l'augmentation en fonction de (c) est beaucoup moins rapide que celle de Nmax , qui comporte un terme exponentiel.

    L'existence d'une solution vérifiant: n = S , donc soumise aux conditions: Nmin <= n et S <= Smax , implique une intersection non vide pour des deux domaines [Nmin ; Nmax] , [Smin ; Smax] ,
    et que l'on ait par conséquent: Nmin <= Smax , soit: 10(c-1) <= F(9) * c ou encore c <= lg(10*F(9)*c) .

    Dans le cas des nombres d'Armstrong de 4me espèce (F(d) = dp) la limite de (c) est celle de la suite: uk+1 = lg(10*(9p)*uk) ,
    et l'on trouve pour quelques valeurs de (p):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     2   3.445 771
     3   4.517 639
     4   5.562 218
    Ceux ceux de la seconde espèce (F(d) = dd) correspondent à p = 9 (F(9) = 99), d'où la limite:
    Les nombres d'Armstrong de première espèce (F(d) = dc) conduisent à l'inéquation: 10c <= 10*9c*c , d'où: c <= Ln(10*c) / Ln(10/9) et c <= 60.847 858 .

    Si vous trouvez les dernières solutions en moins de deux heures, je serais intéressé par la marque de votre PC.
    Je vous refile un tuyau : les plus grands entiers ne comportent que 39 chiffres, et ne diffèrent que de (1):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         115132219018763992565095597973971522400, 
         115132219018763992565095597973971522401


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    merci a touts pour vous repense
    j'ai trouver la solution ça marche bien
    et voila le code source en langage C
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #include<stdio.h>
    #include<stdlib.h>
    int main(){
    	int s,i,j,k,n;
    	for(i=0;i<=9;i++){
    		for(j=0;j<=9;j++){
    			for(k=0;k<=9;k++){ 
    			n=100*i+10*j+k;
    			s=i*i*i+k*k*k+j*j*j;
    			if (s==n && n>=100){
    				printf("%d\t",s);
    				}		
    			}
    		}
    	}
    	return 0;
    }

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Avec ce programme, tu recherches les nombres d'Armstrong entre 100 et 999. La question initiale parlait des nombres d'Armstrong en général.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

Discussions similaires

  1. Réponses: 15
    Dernier message: 18/01/2014, 14h39
  2. Réponses: 0
    Dernier message: 19/10/2011, 14h05
  3. Réponses: 0
    Dernier message: 19/11/2010, 15h03
  4. Calculer les quatre premiers nombres parfaits
    Par nzokou eric dans le forum Pascal
    Réponses: 2
    Dernier message: 28/11/2008, 20h51
  5. [Tableaux] calculer les nombres
    Par ciel65 dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2006, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo