Je vous explique rapidement le sujet et le problème que je rencontre : Le but est de créer un programme en langage C qui afficher tout les nombres sympathique dans un intervalle a et b saisis. Un nombre sympathique est un nombre qui contient autant de chiffres paires que impaires (exemple = 1001)
J'ai donc réussi a faire ce programme :
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
int b;
int n;
int pair = 0;
int impair = 0;
int n2;
int r;
int last = 0;
printf("Saisissez a : ");
scanf("%d", &a);
printf("Saisissez b : ");
scanf("%d", &b);
for (n=a; n<=b; n++)
{
n2=n;
while (n2!=0)
{
r=n2%10;
if (r%2==0)
{
pair++;
}
else if (r%2==1)
{
impair++;
}
n2=n2/10;
}if (pair == impair)
{
printf("%d ", n);
}pair = 0;
impair = 0;
}
return 0;
}
MAIS , MAIS il veut que l'affichage soit de la manière suivante : un "et" doit etre placé entre les deux derniers nombre sympathiques
Exemple on saisit a = 1001 et b=1005, on doit avoir 1001, 1003 et1005 à l'affichage. Le tout sans utiliser de tableau ni chaine de caractères
Salut Pierrot, ducoup ce que tu dit est vrai et marche mais sa marche uniquement lorsqu'il y a que 3 nombres sympathique or dans mon cas a et b seront saisies par le prof ducoup l'intervalle est inconnu. Il me faudrait un truc qui marche quelque soit l'intervalle...
Je suis dessus depuis hier soir mais même avec ce que tu me dit je ne peux pas savoir quelle est le dernier nombre sympathique pour mettre le 'et' juste avant, pourrais tu me détailler un peu plus sur ce que je dois faire stp ?
Stocker tes nombres corrects dans un tableau créé avec malloc et le redimensionner au besoin avec realloc. Si realloc ne marche pas, faire un nouveau malloc plus gros, copier le premier tableau dedans et supprimer ce dernier ensuite avec free ?
Tu n'as ensuite plus qu'à faire une boucle et t'arrêter à l'avant dernier élément.
Bon, c'est une idée à tester, je ne garantis pas que c'est la meilleure solution.
Edit : A noter que le if (r % 2 == 1) ne sert à rien car c'est mutuellement exclusif. Si le nombre n'est pas pair, il est forcément impair.
2ème edit : Je n'avais pas vu qu'il ne fallait pas utiliser de tableau. Désolé. Mon idée est invalide.
- Edité par flashjaysan 17 octobre 2019 à 20:49:45
Oui, je me doutais qu'une allocation d'espace approchée serait plus efficace qu'une allocation à chaque ajout. Mais tu as raison de le souligner. Merci.
Ton idée de prendre la moitié de la différence entre a et b est une bonne base de travail. Idéalement, il faudrait faire une estimation de la fréquence d'apparition de nombres sympathiques (ça doit pouvoir se faire je pense par raisonnement logique) afin d'estimer le nombre potentiel d'occurrences dans une fourchette donnée.
Déjà, on peut éliminer les nombre à "nombre" de chiffres impairs. Pour les autres, on peut partir du nombre de chiffres et tester les chiffres pairs. S'ils sont en nombre différent de la moitié du nombre de chiffre, on peut déjà s'arrêter de tester.
J'ai eu du mal à comprendre ton message. Il vaudrait mieux parler (comme pour les bits) de chiffres "le plus significatif" plutôt que de "premier".
Ah oui ! Bien vu, le chiffre le plus significatif ne peut pas valoir 0 ! Donc par conséquent, on ne peut que tester des nombres dans l'ensemble N*.
Selon un certain nombre de chiffre, le nombre de possibilités de combinaisons est de 9 * 10^(nombreDeChiffre -1).
Fait amusant, la définition d'un nombre "sympathique" semble sujet à débat :
On considère un nombre n entier positif. Si on peut réarranger les nombres entre 1 et n pour former une suite u1,....,un telle que la somme d'un terme de la suite et et de son successeur, est toujours un carré parfait, alors le nombre n est dit sympathique.
Un nombre est sympathique si tous ses chiffres sont différents et s'il est multiple de la somme de ses chiffres.
J'ai de très nébuleux souvenirs des maths combinatoires. Je ne peux donc dire si ton raisonnement est bon. Je manque de rigueur en maths pures.
6750 (3750 + 3000) nombres sympathiques sur 9000 possibilités à 4 chiffres, ça fait pas mal quand même.
Si les 3 chiffres à permuter étaient différents, mon raisonnement serait correct mais il y a des doublons possibles comme j'ai dit.
ça je ne sais pas comment l'exprimer.
Le Tout est souvent plus grand que la somme de ses parties.
Programme nombre sympathique langage C
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.