Не понимаю как реализовать
шахматная доска представим символьной матрицей размера 8x8. заданные натуральные числа n и m, которые определяют номера вертикали и горизонтали местонахождение ферзя. Соответствующий элемент матрицы нужно заменить символом Ф. Поля, находящихся под угрозой ферзя заменить символом *, другие - символом 0. Отпечатать полученную матрицу.
Ответы (2 шт):
Как ходит ферзь? По горизонтали (под боем все клетки, у которых номер строки совпадает с m), по вертикали (под боем все клетки, у которых номер столбца совпадает с n), по диагонали (разность координаты по вертикали и по горизонтали такая же, как у ферзя) и по второй диагонали (сумма координат по вертикали и по горизонтали такая же, как у ферзя).
Все. Просто обходите все клетки доски, проверяйте выполнение любого из условий, и помечайте клетки соответствующим образом.
Схему описал @Harry, поэтому я предоставлю лишь код.
#include <iostream>
int main(){
int n, m; //n - строка, m - столбец
std::cin >> n >> m; --n; --m;
char** field = new char*[8];
for(int i=0; i<8; ++i, std::cout << '\n'){
field[i] = new char[8];
for(int j=0; j<8; std::cout << field[i][j++] << ' ')
if(i==n && j==m) field[i][j] = 'Ф';
else if((i==n) || (j==m) || (i+j == m+n) || (i-j == n-m)) field[i][j] = '*';
else field[i][j] = '0';
}
return 0;
}
UPD:
#include <iostream>
int main(){
int n, m; //n - строка, m - столбец
std::cin >> n >> m; --n; --m;
char** field = new char*[8];
for(int i=0; i<8; ++i){
field[i] = new char[8];
for(int j=0; j<8;){
if(i==n && j==m) field[i][j] = 'Ф';
else if((i==n) || (j==m) || (i+j == m+n) || (i-j == n-m)) field[i][j] = '*';
else field[i][j] = '0';
std::cout << field[i][j++] << ' ';
}
std::cout << '\n';
}
return 0;
}