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

  • 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Задачка

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

Firiat

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

Определить,угрожает ли ферзь, расположенный на поле ( n1,m1 ) шахматной доски ,фигуре, расположенной на поле ( n2,m2 ). ( где n1,m1,n2,m2 - натуральные числа от 1 до 8 ).
 
Таки в чем проблема? В алгоритме? Матрица целых чисел 8х8. начальное состояние - все нули. по координатам ферзя и фигуры - единицы. потом просуммировать вертикаль, где стоит ферзь. если сумма = 2, угрожает. в противном случае суммируем горизонталь. потом диагонали (по необходимости). если дошли до конца программы, значит не угрожает.
 
Вот самый тривиальный алгоритм, без излишиств (массивов и прочего).. :-)) Смешной конечно, но логичный :-)
Правда пытается вычислять что будет если ферзь вылезит за поле :-))) Зато одним циклом :-))

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;
}
 
Еще ифами мона описать :-)))) Но тогда это более мат. подход, зато самый короткий алгоритм

#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;
}
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab