Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2009, 20:59   #11
Paladast
Пользователь
 
Аватар для Paladast
 
Регистрация: 09.08.2009
Сообщений: 66
По умолчанию

Чет я и правда затупил, большое спасибо,понял
Со мной бог и два пулемёта
Paladast вне форума Ответить с цитированием
Старый 09.11.2009, 23:37   #12
yurec92
Новичок
Джуниор
 
Регистрация: 09.11.2009
Сообщений: 2
По умолчанию

интересен вопрос, с тем же слоном. Если нельзя перейти на поле одним ходом, то как вывести координату поля через которое проходит слон(с помощью 2 ходов)?
yurec92 вне форума Ответить с цитированием
Старый 10.11.2009, 09:58   #13
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Через каждое из 2-х полей проведи две диагонали. Точки их пересечения - и есть искомые поля. Осталось только алгоритм сделать.
ds.Dante вне форума Ответить с цитированием
Старый 10.11.2009, 10:43   #14
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
Через каждое из 2-х полей проведи две диагонали. Точки их пересечения - и есть искомые поля. Осталось только алгоритм сделать.
Програмно я бы делал так - находим смещение по иксам и по игрекам (между начальной и конечной точкой). Смотрим разность между модулями этих смещений. Если она нечетная - наша затея провалилась, решения нету (например, надо с белой клетки перейти на черную). Иначе 2 варианта -проверяем, оба, не будет ли выхода за пределы доски. Само решение уравнения хода не знаю, как записать - мне понятно, как делать, но почему-то мне кажеться очень длинным и некрасивым в плане кодинга. Допустим, для x>0 y>0 первое решение - свести смещения к среднему арифметическому текущих смещений (пример, если надо на 4 по иксах и на 6 по игреках - сделать так, чтоб біл нужен ход со смещением на 5 в обеих направлениях), второе - разнос знаков через 0 (на предидущем примере - сделать (-1,1)). Подобным образом для 2 минусов. А для разных заков первое решение - сравнять по разные стороны от нуля, а второе - среднее арифметическое. Блин, это будет много кода
Придумал не совсем "правильное", но короткое решение. Для каждой из 64 клеток проверяем, можно ли в нее попасть с начальной и можно ли с нее попасть в конечную всего то 2 проверки:
Код:
if (abs(x-x1)=abs(y-y1)) and (abs(x-x2)=abs(y-y2))
где (х,у) - текущая точка, (х1,у1) - начальная, (х2,у2) - конечная.
LeBron вне форума Ответить с цитированием
Старый 10.11.2009, 10:59   #15
Bulk
Новичок
Джуниор
 
Аватар для Bulk
 
Регистрация: 10.11.2009
Сообщений: 1
По умолчанию

на счет коня:

if abs(x2-x1) + abs(y2-y1) = 3 then {может} else {не может}
Bulk вне форума Ответить с цитированием
Старый 10.11.2009, 12:08   #16
yurec92
Новичок
Джуниор
 
Регистрация: 09.11.2009
Сообщений: 2
По умолчанию

Всем большое спасибо за совет)
yurec92 вне форума Ответить с цитированием
Старый 10.11.2009, 12:41   #17
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от Bulk Посмотреть сообщение
на счет коня:

if abs(x2-x1) + abs(y2-y1) = 3 then {может} else {не может}
Не верно. Правильно писать
Код:
if abs(x2-x1)*abs(y2-y1)=2 then
так как Ваш вариант "считает", что можно попасть, например, с (1;3) на (4;3).
З.Ы. Или даже
Код:
if abs((x2-x1)*(y2-y1))=2 then
LeBron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слоны [MI_nor] Общие вопросы C/C++ 14 10.08.2009 14:45