Поделитесь своими знаниями, ответьте на вопрос:
С++ Ходы ферзя На шахматной доске стоит ферзь. Отметьте положение ферзя на доске и все клетки, которые бьет ферзь. Клетку, где стоит ферзь, отметьте буквой "Q", клетки, которые бьет ферзь, отметьте символами "*", остальные клетки заполните точками. Входные данные В двух строках входного файла заданы два числа — координаты нахождения ферзя. Числа во входном файле натуральные, не превосходящие 8 по значению. Выходные данные Выведите на экран изображение доски так, как это показано в примере. Обратите внимание, что символы в одной строке разделены пробелом. Примеры Ввод Вывод 4 2 . * . . * . . . . * . * . . . . * * * . . . . . * Q * * * * * * * * * . . . . . . * . * . . . . . * . . * . . . . * . . . * . .
#include <iostream>
using namespace std;
int main()
{
int y, x;
cin >> x >> y;
int a[8][8];
for (int i = 0; i < 8; ++i)
for (int j = 0; j < 8; ++j)
a[i][j] = 0;
y--;
x--;
int px = x, py = y;
while (px >= 0 && py >= 0){
a[px][py] = 2;
px--;
py--;
}
px = x, py = y;
while (px >= 0 && py < 8){
a[px][py] = 2;
px--;
py++;
}
px = x, py = y;
while (px < 8 && py < 8){
a[px][py] = 2;
px++;
py++;
}
px = x, py = y;
while (px < 8 && py >= 0){
a[px][py] = 2;
px++;
py--;
}
px = 0;
while (px < 8){
a[px][y] = 2;
px++;
}
py = 0;
while (py < 8){
a[x][py] = 2;
py++;
}
a[x][y] = 1;
for (int i = 0; i < 8; ++i){
for (int j = 0; j < 8; ++j){
if(a[i][j] == 0) cout << "." << " ";
else if(a[i][j] == 1) cout << "Q" << " ";
else cout << "*" << " ";
}
cout << endl;
}
return 0;
}
Объяснение:
вроде все просто, не знаю, что объяснять. скорее всего, есть возможность сделать это гораздо более оптимизировано, но мне было лень думать, так что сделал тупым и неоптимизированным методом, состоящем из кучи циклов while.
P. s. Если , дайте лучший ответ и жмякните на " " . Это мотивирует давать ответы дальше.