Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
MariaFitzgerald
0 / 0 / 0
Регистрация: 06.03.2017
Сообщений: 109
Завершенные тесты: 1
1

Логическая задача на Си

27.03.2017, 21:18. Просмотров 2200. Ответов 10
Метки нет (Все метки)

Решить нужно с двумя if и else. Без циклов и массивов.

Вова попал на космическом корабле на бесконечную плоскую планету в точку с координатами (x1, y1). Вова, управляя кораблем, имеет возможность за одну секунду телепортироваться из точки (x, y) в одну из точек (x+C, y+C), (x+C, y-C), (x-C, y+C), (x-C, y-C), где C - произвольное натуральное число, которое можно изменять на каждом ходу.

Требуется написать программу, которая определит, через какое минимальное время Вове удастся достичь точки (x2, y2).

Входной файл INPUT.TXT содержит в первой строке числа x1, y1, во второй – x2, y2. Все числа целые от нуля до 10^6. Точки (x1, y1) и (x2, y2) не совпадают.
Пример входного файла:
0 0
0 2

Выходной файл OUTPUT.TXT должен содержать одно число – минимальное время телепортации. Если такая телепортация невозможна, то вывести 0.
Пример выходного файла:
2
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2017, 21:18
Ответы с готовыми решениями:

Логическая задача
Решить нужно с двумя if и else. Без циклов и массивов. Вова попал на космическом корабле на...

Логическая задача
Джафар заточил Алладина в темницу с двумя дверями, одна из которых ведет на свободу,...

Логическая задача
Помогите, пожалуйста дописать решение задачи: Браун, Гриффит, Клеменс и Грин -четверо студентов...

Логическая задача
157-0 362-1 448-2 786-3 688-? надо понять логику задачи и решить её(если не трудно решение...

10
magirus
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28000 / 15730 / 967
Регистрация: 15.09.2009
Сообщений: 67,817
Записей в блоге: 78
27.03.2017, 21:27 2
и что ты тогда забыл в Pyton?
0
ampermetr
23 / 23 / 14
Регистрация: 01.05.2015
Сообщений: 181
28.03.2017, 02:13 3
Условия больше похожи на записки сумасшедшего, но вроде работает...

Python
1
2
3
4
5
6
if (x!=x2 and y!=y2) and (abs(abs(x2)-abs(x))<10**6) and (abs(abs(y2)-abs(y))<10**6):
  result = 2
elif abs(abs(x2)-abs(x))%10**6 == 0 and  abs(abs(y2)-abs(y))%10**6 == 0:
  result =  (abs(abs(x2)-abs(x))//10**6 + abs(abs(y2)-abs(y))//10**6) / (2-(x!=x2 ^ y!=y2))
else:
  result = abs(abs(x2)-abs(x))//10**6 + abs(abs(y2)-abs(y))//10**6 + bool(abs(abs(x2)-abs(x))%10**6) + bool(abs(abs(y2)-abs(y))%10**6)
1
dondublon
4078 / 1547 / 292
Регистрация: 17.03.2012
Сообщений: 8,459
Записей в блоге: 5
28.03.2017, 11:24 4
Эммм... Если я правильно понимаю, то в любую точку Вова сможет попасть за два хода.
Просто любым ходом он может двигаться строго по диагонали в 45 градусов. Подобрать такой прямоугольник труда не составляет.
1
MariaFitzgerald
0 / 0 / 0
Регистрация: 06.03.2017
Сообщений: 109
Завершенные тесты: 1
28.03.2017, 12:20  [ТС] 5
ampermetr, это питон. Я случайно не в ту тему отправила условие, вы не знаете как это будет на си?

Добавлено через 34 минуты
ampermetr, и в решении нужно использовать только входные данные.

Добавлено через 1 минуту
dondublon, да, но как найти время?
0
dondublon
4078 / 1547 / 292
Регистрация: 17.03.2012
Сообщений: 8,459
Записей в блоге: 5
28.03.2017, 12:42 6
MariaFitzgerald, два хода = две секунды
0
ampermetr
23 / 23 / 14
Регистрация: 01.05.2015
Сообщений: 181
28.03.2017, 14:22 7
MariaFitzgerald, я неправильно сначала прочитал условие (думал что 10^6 - это максимальное расстояние телепортации на бесконечной планете). На самом деле всё намного проще:
Python
1
2
3
4
if x1!=x2 and y1!=y2:
  result = 2
else:
  result = 1
Как это записать на Си я не знаю, но думаю, что точно так же, только вместо and используется && (логическое И).
1
MariaFitzgerald
0 / 0 / 0
Регистрация: 06.03.2017
Сообщений: 109
Завершенные тесты: 1
28.03.2017, 18:30  [ТС] 8
ampermetr, а как вы посчитали, что результат 2(и потом 1)?
0
ampermetr
23 / 23 / 14
Регистрация: 01.05.2015
Сообщений: 181
28.03.2017, 18:41 9
MariaFitzgerald, допустим из точки 0 0 надо переместиться в 1 3. Какие на самом деле там числа - не важно. Проверяем: если х1 не равен х2 И у1 не равен у2, то придется сначала переместиться в точку 1 0 и из неё в точку 1 3, на это требуется 2 хода.
Если первое условие не верно( или х1 равен х2 или у1 равен у2, например 0 0 -> 0 3), то требуется всего один ход.
1
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
6352 / 3098 / 838
Регистрация: 18.10.2014
Сообщений: 5,839
30.03.2017, 21:01 10
Лучший ответ Сообщение было отмечено MariaFitzgerald как решение

Решение

Если четность суммы x1+y1 не совпадает с четностью суммы x2+y2, что задача не имеет решения.
В противном случае, если абсолютное значение разности x2-x1 совпадает с абсолютным значением разности y2-y1, то задача решается за 1 ход.
В противном случае, требуется 2 хода.

Те же самые условия можно записать более компактно, если "переместить" задачу так, чтобы начальная точка попала в точку (0, 0)

C
1
2
3
4
5
6
7
8
9
10
11
12
unsigned steps(int x1, int y1, int x2, int y2)
{
  x2 -= x1;
  y2 -= y1;
 
  if (x2 % 2 != y2 % 2)
    return 0;
  else if (x2 == y2 || x2 == -y2)
    return 1;
  else
    return 2;
}
1
asd360
1 / 1 / 1
Регистрация: 07.04.2019
Сообщений: 41
07.04.2019, 21:08 11
При x1=-1, y1=2, x2=0, y2=-1 ваш код выдаст 0, но если посмотреть на плоскость ответ будет 2.
Нужно чуть изменить условие
C
1
2
3
4
5
6
7
8
9
10
11
12
unsigned steps(int x1, int y1, int x2, int y2)
{
  x2 -= x1;
  y2 -= y1;
 
  if (x2 % 2 == 0 && y2 % 2 !=0 || x2 % 2 != 0 && y2 % 2 == 0)
    return 0;
  else if (x2 == y2 || x2 == -y2)
    return 1;
  else
    return 2;
}
0
07.04.2019, 21:08
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2019, 21:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

логическая задача
Решить методом полного перебора задачу и разработать программу на CLOS (Lisp) для ее решения тем же...

Логическая задача
Если Борис не пришел на собрание, то отсутствует и Алексей. Если Борис пришел на собрание, то...

Логическая задача
Помогите пожалуйста!! Дана логическая задача: Друзья обсуждают поход на дискотеку. 1. Если ни...

Логическая задача
Пять человек- Саша, Борис, Виталий, Лена и Дмитрий живут в 5 разных городах: Хабаровск, Ульяновск,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.