• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Задачка

  • Автор темы Firiat
  • Дата начала
F

Firiat

Привет Всем !!!!

Определить,угрожает ли ферзь, расположенный на поле ( n1,m1 ) шахматной доски ,фигуре, расположенной на поле ( n2,m2 ). ( где n1,m1,n2,m2 - натуральные числа от 1 до 8 ).
 
V

vitfil

Таки в чем проблема? В алгоритме? Матрица целых чисел 8х8. начальное состояние - все нули. по координатам ферзя и фигуры - единицы. потом просуммировать вертикаль, где стоит ферзь. если сумма = 2, угрожает. в противном случае суммируем горизонталь. потом диагонали (по необходимости). если дошли до конца программы, значит не угрожает.
 
D

DarkKnight

Вот самый тривиальный алгоритм, без излишиств (массивов и прочего).. :)) Смешной конечно, но логичный :)
Правда пытается вычислять что будет если ферзь вылезит за поле :))) Зато одним циклом :))

C++:
#include <iostream>
#include <Windows.h>

using namespace std;
void main(void)
{
setlocale(LC_ALL,"Russian");
int px,py; //Фигура
int fx,fy; //Ферзь
cout<<"Введите координаты ферзя X,Y :";
scanf("%i,%i",&fx,&fy);

cout<<"Введите координаты фигуры X,Y :";
scanf("%i,%i",&px,&py);
cout<<endl;

bool Res = false;
for (int i = 1; i<8; i++)
{
//Диагональ
if ( fx-i == px && fy-i == py) { Res = true; break; }
if ( fx+i == px && fy+i == py) { Res = true; break; }
//Перпендикуляры к осям
if (fx-i == px && fy == py) { Res = true; break; }
if (fx+i == px && fy == py) { Res = true; break; }

if (fx == px && fy+i == py) { Res = true; break; }
if (fx == px && fy-i == py) { Res = true; break; }
}

if (Res)
{
cout<<"Усе, нет больше фигуры"<<endl;
} else cout<<"Все живы и счастливы :-)"<<endl;
}
 
D

DarkKnight

Еще ифами мона описать :)))) Но тогда это более мат. подход, зато самый короткий алгоритм

#include <iostream>

C++:
using namespace std;
void main(void)
{
setlocale(LC_ALL,"Russian");
int px,py; //Фигура
int fx,fy; //Ферзь
cout<<"Введите координаты ферзя X,Y :";
scanf("%i,%i",&fx,&fy);

cout<<"Введите координаты фигуры X,Y :";
scanf("%i,%i",&px,&py);
cout<<endl;

bool Res = false;
//Это условие для перпендикуляров к осям
if (fx == px || fy == py) Res = true;
//Это условие при диагоналях
if (px-py == fx-fy || px+py == fx+fy) Res = true;

if (Res)
{
cout<<"Усе, нет больше фигуры"<<endl;
} else cout<<"Все живы и счастливы :-)"<<endl;
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!