Вопрос задан 25.06.2023 в 12:53. Предмет Информатика. Спрашивает Лучников Ян.

С++ Ходы ферзя На шахматной доске стоит ферзь. Отметьте положение ферзя на доске и все клетки,

которые бьет ферзь. Клетку, где стоит ферзь, отметьте буквой "Q", клетки, которые бьет ферзь, отметьте символами "*", остальные клетки заполните точками. Входные данные В двух строках входного файла заданы два числа — координаты нахождения ферзя. Числа во входном файле натуральные, не превосходящие 8 по значению. Выходные данные Выведите на экран изображение доски так, как это показано в примере. Обратите внимание, что символы в одной строке разделены пробелом. Примеры Ввод Вывод 4 2 . * . . * . . . . * . * . . . . * * * . . . . . * Q * * * * * * * * * . . . . . . * . * . . . . . * . . * . . . . * . . . * . .
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Хасаньянов Тимур.

Ответ:

#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
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения этой задачи вам потребуется написать программу на языке C++. Вот пример такой программы:

cpp
#include <iostream> using namespace std; int main() { int x, y; cin >> x >> y; char board[8][8]; // Инициализация доски for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { board[i][j] = '.'; } } // Отмечаем положение ферзя board[x - 1][y - 1] = 'Q'; // Отмечаем клетки, которые бьет ферзь for (int i = 0; i < 8; i++) { board[x - 1][i] = '*'; // Горизонталь board[i][y - 1] = '*'; // Вертикаль if (x - 1 + i < 8 && y - 1 + i < 8) board[x - 1 + i][y - 1 + i] = '*'; // Диагональ 1 if (x - 1 - i >= 0 && y - 1 - i >= 0) board[x - 1 - i][y - 1 - i] = '*'; // Диагональ 2 if (x - 1 + i < 8 && y - 1 - i >= 0) board[x - 1 + i][y - 1 - i] = '*'; // Диагональ 3 if (x - 1 - i >= 0 && y - 1 + i < 8) board[x - 1 - i][y - 1 + i] = '*'; // Диагональ 4 } // Выводим доску for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { cout << board[i][j] << " "; } cout << endl; } return 0; }

Эта программа считывает координаты ферзя, создает шахматную доску, отмечает положение ферзя и все клетки, которые он бьет, и выводит результат на экран.

Пример ввода и вывода, который вы привели, будет работать с этой программой.

0 0

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

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос