Besoin d'aide pour un algorithme , urgent :)

Sweet..l0la Messages postés 75 Statut Membre -  
Char Snipeur Messages postés 10112 Statut Contributeur -
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 785 Statut Membre 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 785 Statut Membre 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 10112 Statut Contributeur 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 785 Statut Membre 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 10112 Statut Contributeur 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