Vous devez écrire un programme qui détermine dans une partie d'échecs, si un cavalier peut prendre une pièce de l'adversaire. Rappelons que les échecs se jouent sur un plateau carré de 8 cases par 8. Un cavalier se déplace en avancant d'une case horizontalement ou verticalement, puis en allant en diagonale, sans revenir en arrière. Le cavalier peut se déplacer même si la case intermédiaire de son déplacement contient une pièce (amie ou ennemie).
Qu'est-ce que tu ne comprends pas? Pour avancer horizontalement il faut ajouter ou sousttraire 1 à la valeur de la position sur les lignes. Il faut d'abord vérifier si on n'est pas au bord (indice==0 ou indice==7) Mème strattégie si tu veux te déplacer sur les colonnes. Pour avancer en diagonale, c'est sans doute plus compliqué ppour toi. Je préfère décrire le mouvement du cavalier comme suit: On avance de 1/2 dans une direction et de 2/1 dans la direction orthogonale (avancer ou reculer). Ça me semble plus simple car tu n'agit que sur un indice à la fois. Il y a 8 positions à trouver et vérifier si elles ne sont pas en dehors du jeu. (-1, -2), (-1, +2), (-2, -1), (-2, +1), (+1, -2), (+1, +2), (+2, -1), (+2, +1)
Le Tout est souvent plus grand que la somme de ses parties.
Tu commences tes boucles à 2 et les termines à 6. Si un cavalier se trouve en 4,0 et je veux le faire aller en 2,1, tu ne le détectes pas. Tu as trop simplifié le problème. L'idée ici est de vérifier les bornes avant de se déplacer. Et il faut considérer tous les déplacements possibles.
Le Tout est souvent plus grand que la somme de ses parties.
Désolé, je ne peux pas colorer mon code avec une synthèse vocale. Ce code devrait fonctionner. L'utilisation d'un tableau de déplacements diminue considérablement le code. - #include <iostream> int main() { char mat[8][8]; int move[8][2] = {{-2, -1}, {-2, 1}, {-1, -2}, {-1, 2}, {1, -2}, {1, 2}, {2, -1}, {2, 1}}; for(int i=0; i<8; i++) { for(int j=0; j<8; j++) { std::cin >> mat[i][j]; } // for j } // for i for(int i=0; i<8; i++) { for(int j=0; j<8; j++) { if(mat[i][j] == 'C') { for(int p=0; p<8; p++) { int l = i + move[p][0]; int c = j + move[p][1]; if(0<=l && l<=7 && 0<=c && c<=7) { if(islower(mat[l][c])) { std::cout << "yes" << std::endl; return 0; } // islower } // if bornes } // for p } // if cavalier } // for j } // for i std::cout << "no" << std::endl; return 0; } // main
Le Tout est souvent plus grand que la somme de ses parties.
Attaque du cavalier france ioi
× 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.
Le Tout est souvent plus grand que la somme de ses parties.
ce code marche pour 9 des 10 tests et affiche "no" au lieu de "yes"
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.