Tout d'abord, la forme truc1<=truc2<=truc3 que tu mets dans ton if ne va pas te faire ce que tu attends, méfie toi de ça !
Toujours par 2 les éléments (car en l'occurrence tu vas voir si le résultat de la premiere inégalité (un bool) est plus petit que l'autre.
A l'avenir fait bien :
truc1<=truc2 && truc2<=truc3
bref :
Etant dans le forum C++, prend donc une map : un conteneur plus adapté a ce que tu veux faire : c'est un conteneur associatif puissant.
jette donc un oeil a cet exemple qui associe, a chaque mois, son nombre de jours, tu peux faire une map<int,int> bien sur.
D'après ce que j'ai compris, tu as 2 "listes" indépendantes d'éléments sous forme de tableau. ET tu cherches à afficher à l'écran les pairs qui correspondent à une certaine condition.
Je ne crois pas que l'utilisation d'une map soit utile ici.
On sait que pour un X donné, on cherche tous les Y compris entre X et X+K.
Je ferais cela comme ça:
1) J'utiliserais des std::vector<int> pour contenir tout ça.
2) Je trierais mes 2 tableaux (par exemple avec le sort de <algorithm>)
3) Je parcourrais le tableau des X.
4) Pour chaque X, je chercherais le premier Y qui est <=X et le dernier qui est <=X+K (avec la fonction find)
5) J'afficherais les paires comme étant l'ensemble des cases comprises entre les 2 "rangs" de mon tableau trouvé au 4)
Parce que une fois que c'est trier, il n'y a plus besoin de tout tester pour chaque élément, il suffit de trouver le plus petit X qui satisfait ta condition et le plus grand. Ensuite tous les éléments entrent vérifieront ta proposition sans avoir besoin de les tester à chaque fois.
Pour le point 1:
Parce que il existe une fonction dans la bibliothèque <algorithm> qui permet de trier les std::vector (en particulier)
Et quand je dis trier les tableaux, je pensais mettre les éléments qu'ils contiennent dans l'ordre croissant.
Sinon, si tu veux pas implémenter une solution aussi complexe, je te propose la modification suivante:
for(int i =0;i<n1;i++) { for(int j=i;j<n2;j++)//on commence au i-ème élément pour eviter que les paires soient affichees 2 fois { if(tab1[i]<=tab2[j] && tab[2]<=tab1[i]+k) {
cout<<"paire: "<<tab1[i]<<" "<<tab2[j]<<endl; } } }
× 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.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html