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

Langage C++ Discussion :

Former le plus grand nombre possible avec 4 chiffres


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité, mais avide de savoir
    Inscrit en
    Mars 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité, mais avide de savoir

    Informations forums :
    Inscription : Mars 2022
    Messages : 11
    Par défaut Former le plus grand nombre possible avec 4 chiffres
    Bonjour,
    Je sèche sur un petit problème…Je reçois un nombre de 4 chiffres, par exemple 7835 et je voudrais en faire, avec ces 4 chiffres, le plus grand nombre, soit 8753. Auriez-vous l'amabilité de m'aiguiller ?

    Merci et bonne journée

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Il y a 1 difficulté ?


    Code : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <iostream>
     
    #include <cstdlib>
     
     
    int main()
    {
        size_t n = 7835;
        char tab[4];
     
    //  Extract digits
        tab[0] =  (n / 1000);
        tab[1] = ((n /  100) - (tab[0] *  10));
        tab[2] = ((n /   10) - (tab[0] * 100) - (tab[1] * 10));
        tab[3] = (n - (tab[0] * 1000) - (tab[1] * 100) - (tab[2] * 10));
     
    //  bubble sort, descending order
        for(size_t i=3, j, tmp; i > 0; --i) {
            for(j=0; j < i; ++j) {
                if (tab[j+1] > tab[j]) {
                    tmp      = tab[j+1];
                    tab[j+1] = tab[j];
                    tab[j]   = tmp;
                }
            }
        }
     
    //  Calculate maximum
        n = ((tab[0] * 1000) + (tab[1] * 100) + (tab[2] * 10) + tab[3]);
     
    //  Display maximum
        std::cout << n << std::endl;
     
     
        return EXIT_SUCCESS;
    }

  3. #3
    Membre chevronné
    Homme Profil pro
    web a11y
    Inscrit en
    Avril 2014
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : web a11y
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 191
    Par défaut
    Bonjour,

    En approche basique (vision algo), je dirai :
    - considérer que ton nombre est une liste de chiffres,
    - trier les chiffres par ordre décroissant.

    Pour cela, en version code :
    - vérifier que c'est bien un nombre entier,
    - le transformer en ce qui t'arranges : une liste ? un tableau ? une chaîne de caractères ? bref ce qui te simplifiera la vie pour le traitement,
    - trier…
    - retransformer en nombre entier.

    Ton choix de structure de données pour le traitement dépend de ce que tu connais du C++, de ce qui existe déjà comme fonctions dans le langage (pour transformer, traiter, etc), etc. Pour les détails techniques du C++, ce n'est pas moi qui te répondrai.

    Bonne continuation !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Si le chiffre vient dans un int, tu le découpes, tries et recolles les morceaux.
    Si c'est une string, tu peux directement la trier.
    Depuis un int, tu pourrais aussi le mettre dans une string pour la trier.
    Ceci se fait en... 1 ligne ?
    std::sort
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    size_t n = 7835;
    std::string str = std::to_string(n);
    std::sort(str.begin(), str.end(), [](char a, char b) { return a > b; });
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre averti
    Homme Profil pro
    Retraité, mais avide de savoir
    Inscrit en
    Mars 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité, mais avide de savoir

    Informations forums :
    Inscription : Mars 2022
    Messages : 11
    Par défaut
    Merci à tous!

  6. #6
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 624
    Par défaut
    Bonjour,

    Si on vise plus la performance que la concision, il est possible d'éviter le tri (bon pour 4 malheureux chiffres ce n'est pas très intéressant).
    Code : 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 <iostream>
    #include <cstdlib>
    int main() {
       size_t   n     = 7835;
       uint8_t  v[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
     
       while(n != 0) {                               // extract digits
          int u = n;
          n /= 10;
          v[u-10*n]++;                               // v[5]=1, v[3]=1, v[8]=1, v[7]=1
          }
       for(int i = 9; i >= 0; --i) {
          while(v[i]) { n = 10*n + i; v[i]--; }      // n=0+8=8, n=80+7=87, n=870+3=873, n=8730+5=8735
       }
       std::cout << n << std::endl;                  // display maximum
     
       return EXIT_SUCCESS;
    }
    En fait cela s'apparente quand même au tri du facteur en base 10. Nous sommes quasiment en O(nb chiffres). En espérant n'avoir pas laissé trop de scories .

    Salutations

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    @Guesset voulait parler du bucket sort ou bin sort (<- lien wikipédia en anglais) qui est la base d'autres algos : histogram sort, postman's sort, radix sort, ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2013, 12h19
  2. Réponses: 2
    Dernier message: 16/04/2007, 11h53
  3. Réponses: 52
    Dernier message: 13/03/2007, 15h07
  4. Plus grand nombre possible
    Par lia dans le forum C++
    Réponses: 2
    Dernier message: 30/08/2006, 11h22
  5. [Access] Trouver qui a le plus grand nombre de visites
    Par maxidoh dans le forum Langage SQL
    Réponses: 13
    Dernier message: 03/04/2006, 03h00

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