Maths et Programmation (Dev C++)

Maths et Programmation (Dev C++) - C++ - Programmation

Marsh Posté le 22-06-2006 à 20:17:33    

Bonjour,
 
Voilà j'ai un problème de mathématiques que je n'arrive pas à résoudre. J'ai donc décidé d'utiliser un programme en C++. Alors, voilà l'énoncé :
 
N.B. : a^3 signifie "a au cube"
 
"Soit trois entiers naturels a,b,c tels que a+b+c=43 et que a^3+b^3+c^3=17299.
 
Mon problème est de faire trois boucles :  
Pendant (a<=50){
Pendant (b<=50){
Pendant (c<=50){
Si (a+b+c==43){
Si (a*a*a+b*b*b+c*c*c=17299){
Afficheràl'Ecran a,b,c
}
}
}
}
}
 

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <math.h>
  4. using namespace std;
  5. int main(int argc, char *argv[])
  6. {
  7. long int a=1,b=1,c=1;
  8. while(a<=100){
  9.              while(b<=100){
  10.                           while(c<<100){
  11.                                        if(a+b+c==43){
  12.                                                     if(a*a*a+b*b*b+c*c*c==17299){
  13.                                                                                cout<<a<<b<<c<<endl;
  14.                                                                                }
  15.                                                     }
  16.                                        c=c+1;
  17.                                        }
  18.                           b=b+1;
  19.                           }
  20.              a=a+1;
  21.              }
  22. system("PAUSE" );
  23. return EXIT_SUCCESS;
  24. }

         
 
Le problème, c'est que quand je compile, le programme ne me retourne aucune réponse...
 
Qu'est-ce qui cloche dans mon code source?                          
 
Merci d'avance,
Benoît :bounce:          

Reply

Marsh Posté le 22-06-2006 à 20:17:33   

Reply

Marsh Posté le 22-06-2006 à 20:19:12    

while(c<<100) ...

Reply

Marsh Posté le 22-06-2006 à 20:19:51    

et puis y a pas d'affichage dans ton programme ...

Reply

Marsh Posté le 22-06-2006 à 20:28:28    

Merci, j'ai remplacé <= par <<, mais le programme ne m'affiche toujours rien...
 
http://img170.imageshack.us/img170/821/screenshot0011ff.jpg

Reply

Marsh Posté le 22-06-2006 à 20:28:54    

Si, "cout" affiche les valeurs à l'écran.

Reply

Marsh Posté le 22-06-2006 à 20:48:12    

jusqu'a 43 (ou 41 en partant de 1 si les entiers doivent etre non nul)
 

Reply

Marsh Posté le 22-06-2006 à 21:25:59    

J'allais le dire. Passer par l'ordinateur ne dispense pas d'un minimum d'analyse.
Si a+b+c=43, aucun des entiers naturels a, b, ou c ne peut être supérieur à 43.
Ensuite, en posant c = 43 - (a+b), il n'y a besoin de faire que 2 boucles.  
Et encore, elles sont largement réduites par la condition que a + b <= 43.
 
Un algo serait donc, à vue de nez:
 
Pour a = 0 .. 43
   Pour b = 0 ... 43 - a
      c = 43 - (a+b)
      Si a^3 + b^3 + c^3 == 17299
          Affiche a, b, c
 
qui donne le résultat immédiatement.
Question: Combien y'a-t'il de solutions ? Obtient-on toutes les solutions par cette méthode  (modulo les permutations évidentes de a, b, c) ?

Message cité 1 fois
Message édité par el muchacho le 22-06-2006 à 21:45:28

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 23-06-2006 à 16:34:18    

el muchacho a écrit :

J'allais le dire. Passer par l'ordinateur ne dispense pas d'un minimum d'analyse.


:jap: Je ne peux que plussoyer !
 
 

el muchacho a écrit :

Question: Combien y'a-t'il de solutions ? Obtient-on toutes les solutions par cette méthode  (modulo les permutations évidentes de a, b, c) ?


On peut aussi éviter les permutations de a et b avec un algo du genre :

pour d = 0..42   (d = a+b)
  c = 43-d
  pour a=1..d/2
    b = d-a
    si a^3 + b^3 + c^3 == 17299
      affiche a, b, c
    fin si
  fin pour
fin pour


 
Avec un peu plus de travail, je pense qu'on devrait pouvoir éviter *toutes* les permutations.


---------------
TriScale innov
Reply

Marsh Posté le 23-06-2006 à 16:36:48    

benitoelputoamo a écrit :

Merci, j'ai remplacé <= par <<, mais le programme ne m'affiche toujours rien...


rassure moi, tu voulais bien dire l'inverse ?
c'est << qu'il faut remplacer par <= :o


---------------
TriScale innov
Reply

Marsh Posté le 24-06-2006 à 19:46:54    

Merci. Je n 'ai pas l'habitude d'utiliser "for"...

Reply

Marsh Posté le 24-06-2006 à 19:46:54   

Reply

Marsh Posté le 25-06-2006 à 12:23:07    

benitoelputoamo a écrit :

Merci. Je n 'ai pas l'habitude d'utiliser "for"...


for (initialisation; test; incrément)
{
    action
    <...>
}


 
Est presque équivalent mais beaucoup plus pratique que

initialisation
while (test)
{
    action
    <...>
    incrément
}


 
Avec un peu d'expèrience, cela viendra tout seul...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 25-06-2006 à 13:08:37    

7, 11 et 25
 

Code :
  1. int a,b,c ;
  2.    
  3.     for (int a=1 ; a<=43 ; a++)
  4.       for (int b=a+1 ; b+a<43 ; b++)
  5.         for (int c=b+1 ; a+b+c<=43 ; c++)
  6.           if(a+b+c==43)
  7.              if (a*a*a+b*b*b+c*c*c == 17299)
  8.                printf("a:%d b:%d c:%d\n", a,b,c) ;


 
arache coded  [:jagstang]


Message édité par jagstang le 25-06-2006 à 13:12:12

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed