Besoin d'aide pour un algorithme , urgent :)

Fermé
Sweet..l0la Messages postés 70 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 29 juillet 2013 - 29 sept. 2010 à 14:47
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 30 sept. 2010 à 14:47
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
29 sept. 2010 à 14:59
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 mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
30 sept. 2010 à 00:27
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
30 sept. 2010 à 00:49
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 mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
Modifié par yuri648 le 30/09/2010 à 14:40
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 vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 sept. 2010 à 14:25
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 mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
30 sept. 2010 à 14:42
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 vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 sept. 2010 à 14:47
#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