Задать вопрос
@432ffqfw

Где ошибка в задачке с возможными ходами ферзя?

Вот задание
На доске стоит ферзь, требуется отметить все клетки, в которые он может походить.

Входные данные

Во входных данных записана шахматная доска. Она представляет из себя таблицу 8×8, в каждой клетке которой записан символ точки (номер 46 в ASCII таблице), кроме одной - в ней записан символ F (номер 70 в ASCII таблице). В этой выделенной точке стоит ферзь.

Выходные данные

Выведите таблицу в аналогичном формате, заменив все символы точек на символ ! (номер 33 в ASCII таблице) для всех ячеек, в которые может походить ферзь.

Примечание

Ферзь всегда ходит на любое количество клеток в любую из восьми сторон. Смотрите первый тест для более точного понимания ходов ферзя.

Вот код
#include <iostream>
using namespace std;
int main() {
    int y, x;
    char A[8][8];
    for(int i = 0; i<8; ++i) {
        for (int j = 0; j < 8; ++j) {
            cin >> A[i][j];
            if(int(A[i][j]) == 70){
                y = i;
                x = j;
            }
        }
    }
    for(int i = 0; i<8; ++i) {
        for (int j = 0; j < 8; ++j) {
            if(i == y && j != x){
                A[i][j] = '!';
            } else if(j == x && i != y){
                A[i][j] = '!';
            }
        }
    }
    for(int x1 = x-1, y1 =y-1;y1 >= 0, x1 >= 0; --x1, --y1){
        A[y1][x1] = '!';
    }
    for(int x1 = x+1, y1 =y+1; y1 <= 8, x1 <= 8; ++x1, ++y1){
        A[y1][x1] = '!';
    }
    for(int x1 = x+1, y1 =y-1; y1 >= 0, x1 <= 8; ++x1, --y1){

        A[y1][x1] = '!';
        for(int i = 0; i<8; ++i) {
            for (int j = 0; j < 8; ++j) {
                cout << A[i][j];
            }
            cout << endl;
        }
    }
    for(int x1 = x-1, y1 =y+1; y1 <= 8, x1 >= 0; --x1, ++y1){  //ошибка где то в этих форах но где понять не могу

        A[y1][x1] = '!'; 
    }
    for(int i = 0; i<8; ++i) {
        for (int j = 0; j < 8; ++j) {
            cout << A[i][j];
        }
        cout << endl;
    }
}

Вот вывод
Correct output:
!...!...
.!..!..!
..!.!.!.
...!!!..
!!!!F!!!
...!!!..
..!.!.!.
.!..!..!


Your code output:
!...!...
!!..!..!
..!.!.!.
...!!!..
!!!!F!!!
...!!!..
..!.!.!.
.!..!..!
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
int(A[i][j]) == 70). Блин. А A[i][j] == 'F' написать религия не позволяет?

А ошибка в том, что у вас в циклах, которые по диагонали знаки ставят, условие выхода некорректное.
У вас там <= 8, когда как индексы в матрице от 0 до 7. И при координате равной 8 вы пишите в какую-то левую память. Иногда совпадает, что это начало следующей строки. Иногда вы можете перезаписывать какую-то другую переменную. Вообще, программа может и упасть с ошибкой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы