Задачка

Firiat

Well-known member
19.10.2010
48
0
#1
Привет Всем !!!!

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

vitfil

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

domny

#5
Если что, вот мои координаты. Решу. Недорого
648964446
sc2.domny@inbox.ru
 

DarkKnight

Well-known member
01.08.2010
653
0
#6
Вот самый тривиальный алгоритм, без излишиств (массивов и прочего).. :)) Смешной конечно, но логичный :)
Правда пытается вычислять что будет если ферзь вылезит за поле :))) Зато одним циклом :))

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;
}
 

DarkKnight

Well-known member
01.08.2010
653
0
#7
Еще ифами мона описать :)))) Но тогда это более мат. подход, зато самый короткий алгоритм

#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;
}