с++
Ходы ферзя
На шахматной доске стоит ферзь. Отметьте положение ферзя на доске и все клетки, которые бьет ферзь. Клетку, где стоит ферзь, отметьте буквой "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. Если помогло, дайте лучший ответ и жмякните на "Спасибо", пожалуйста. Это мотивирует давать ответы дальше.