Besoin d'aide pour un algorithme , urgent :)

Sweet..l0la Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Donc voilà , j'essaie de résoudre un exercice pendant maintenant 4 jours mais en vain , j'avance très lentement et c'est pour samedi , a ce rythme j'y arriverais pas :/
Voilà l'exercice :

" On remarque que 12x42=21x24
Il y a 14 produits qui vérifie cette propriété :
(10a+b)(10c+d)=(10b+a)(10d+c) où a<>b et c<>d
Le programme doit trouver ces 14 produits qui vérifie cette propriété sans redondance ."

J'ai besoin de votre aide s'il vous plait ,
Merci d'avance :)
A voir également:

5 réponses

Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
Ben tu fais une boucle sur tous les a, b, c, d possibles.

Tu calcules les résultats de la première partie de ton équation, et tu les mets dans un grand tableau (assez grand pour stoquer tous les résultats.

En parallèle tu calcules aussi la formule de la deuxième partie de l'équation.

ensuite tu compares et tu gères les cas qu'on ne veut pas...

je te laisse compléter et faire les détails.
0
yuri648 Messages postés 677 Date d'inscription   Statut Membre Dernière intervention   7
 
peut etre il vous manque les donnés de l'exo a,b,cd doivent avoir les limite
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
apparemment, c'est implicite que les nombres cherchés sont à deux chiffres. a, b, c, d représentent des chiffres de 0 à 9, et non n'importe quel entier.
0
yuri648 Messages postés 677 Date d'inscription   Statut Membre Dernière intervention   7
 
voila je l'ai tester sur java et sa marche tres bien

int i=1;
int a=1,b=1,c=1,d=1;
while((i<=14)&&(a<=9))
{
while((i<=14)&& (b<=9))
{
while((i<=14)&& (c<=9))
{
while((i<=14)&&(d<=9))
{
int y=(10*a+b)*(10*c+d);
int u=(int) ((10*b+a)*(10d+c));
if(y==u)
{i++;
System.out.println((10*a+b)+"*"+(10*c+d)+"="+(10*b+a)+"*"+(10d+c));
}
d++;


}
c++;d=1;

}
b++;c=1;d=1;


}
a++;b=1;c=1;d=1;

}






}

resultat:

11*11=11*11.0
12*21=21*12.0
13*31=31*13.0
14*41=41*14.0
15*51=51*15.0
16*61=61*16.0
17*71=71*17.0
18*81=81*18.0
19*91=91*19.0
22*11=22*11.0
24*21=42*12.0
26*31=62*13.0
28*41=82*14.0
33*11=33*11.0

bon courage
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Mouai.
heureusement que tu sais qu'il n'y en a que 14.
Ensuite, il est facile de trouver 13*31=31*13, c'est évidant, on peu en trouver plein des comme ça. Font il parti de la sélection ?
pourquoi ton algorithme ne sort pas 22×22 et 19×91 ? Je pense qu'il y a un problème avec les 9
Je pense qu'il faut être plus rusé que ça.
0
yuri648 Messages postés 677 Date d'inscription   Statut Membre Dernière intervention   7
 
oui c'est vrai c'est une erreur j'ai pas fait attention a,b,c,d doivent etre <= 9

donc c bon j'ai rectifié l'algo

merci Char Snipeur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
#include <iostream>
std::ostream &cout=std::cout;
int main()
{
int n=0;
for(int a=1;a<6;++a)// rien ne sert au dela de 5 on retrouvera à droite.
for(int b=1;b<10;++b)
for(int c=1;c<10;++c)
for(int d=1;d<10;++d)
{
    if((a==d)&&(b==c))continue;// on saut les inversions de multiplication   
    if((a==b)&&(c==d))continue;// suppression de aa*cc==aa*cc
    if((a*10+b)*(c*10+d)==(b*10+a)*(d*10+c))
    {
        cout<<(a*10+b)<<"x"<<(c*10+d)<<"=="<<(b*10+a)<<"x"<<(d*10+c)<<"\n";
        ++n;
    }
}
cout<<n<<" resultats\n";
std::cin>>n;
return 0;
}

37 résultats, beaucoup en double à supprimer, mais je n'ai pas trouvé comment. Maintenant à toi de réfléchir aux condions double pour ajuster les bornes.
0