В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
pasha19899p06z9m
pasha19899p06z9m
19.03.2021 11:18 •  Информатика

С++ Ходы ферзя
На шахматной доске стоит ферзь. Отметьте положение ферзя на доске и все клетки, которые бьет ферзь. Клетку, где стоит ферзь, отметьте буквой "Q", клетки, которые бьет ферзь, отметьте символами "*", остальные клетки заполните точками.

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

В двух строках входного файла заданы два числа — координаты нахождения ферзя. Числа во входном файле натуральные, не превосходящие 8 по значению.

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

Выведите на экран изображение доски так, как это показано в примере. Обратите внимание, что символы в одной строке разделены пробелом.

Примеры
Ввод
Вывод
4
2
. * . . * . . .
. * . * . . . .
* * * . . . . .
* Q * * * * * *
* * * . . . . .
. * . * . . . .
. * . . * . . .
. * . . . * . .

Показать ответ
Ответ:
05032009
05032009
20.04.2021 12:00

#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. Если , дайте лучший ответ и жмякните на " " . Это мотивирует давать ответы дальше.

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота