Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/664: Рейтинг темы: голосов - 664, средняя оценка - 4.63
203 / 90 / 15
Регистрация: 27.07.2018
Сообщений: 323
1

Ищем клад — 1

28.10.2018, 18:22. Показов 122688. Ответов 55
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите решить задачу.
Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0) и смотрим на север. Нам известно, где закопан клад, но этого мало: остров полон опасностей, и нужно перемещаться строго по указаниям карты, которая, к счастью, тоже имеется в нашем распоряжении. Мы хотим найти клад как можно скорее.

Известны координаты клада и указания, которым нужно следовать, чтобы его найти. Каждое указание карты состоит из одного слова и, возможно, одного натурального числа. Слово — одно из набора: «вперёд», «налево», «направо», «разворот» или «стоп».

После слова «вперёд» следует количество шагов, которое следует пройти в том направлении, куда мы в данный момент смотрим. Слова «налево» или «направо» означают, что нужно изменить направление взгляда под прямым углом, «разворот» — что прямо на обратное. Команда «стоп» означает остановку.

Найдите минимальное количество указаний карты, которое нужно выполнить, чтобы прийти к кладу.

Формат ввода
Сначала вводятся два числа на отдельных строчках: координаты клада по оси икс (запад-восток) и игрек (юг-север).
Затем следует некоторое количество указаний карты. Каждое указание карты состоит из одного слова и, возможно, одного натурального числа на отдельной строке. Слово — одно из набора: «вперёд», «налево», «направо», «разворот» или «стоп».

Формат вывода
Программа выводит на отдельных строках минимальное количество указаний карты, которое нужно выполнить, чтобы прийти к кладу, и направление взгляда в этот момент (одно из: «север», «юг», «запад», «восток»). Гарантируется, что карта приводит к кладу.

Добавлено через 33 минуты
Что тут делать хотя бы надо, я не понимаю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2018, 18:22
Ответы с готовыми решениями:

Ищем клад — 2
Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или input.txt...

Ищем клад — 1
Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0) и...

Ищем клад-1
Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0) и...

Ищем клад
Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0) и...

55
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
03.11.2018, 21:00 2
Лучший ответ Сообщение было отмечено CyberGame как решение

Решение

Ну ты даешь, 2 минутная задача, даже для новичка все же в условии понятно
Лови код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
the_minimum_number_of_instructions = 0
x = int(input())
y = int(input())
x_y = [0, 0]
direction_of_movement = input()
if x == 0 and y == 0:
    print(0)
while direction_of_movement != 'стоп':
    steps = int(input())
    the_minimum_number_of_instructions += 1
    if direction_of_movement == 'север':
        x_y[1] += steps
    elif direction_of_movement == 'запад':
        x_y[0] -= steps
    elif direction_of_movement == 'юг':
        x_y[1] -= steps
    elif direction_of_movement == 'восток':
        x_y[0] += steps
    if int(x) == x_y[0] and int(y) == x_y[1]:
        print(the_minimum_number_of_instructions)
        break
    direction_of_movement = input()
думаю все понятно и без пояснений. Удачи)
2
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
03.11.2018, 22:16 3
Я ни хрена в условии не понял, а переспрашивать бесполезно, по-моему.
Python
1
2
3
4
5
6
7
8
9
10
11
12
x_klad = int(input())
y_klad = int(input())
 
for i in range (abs(x_klad)):
    print ("восток" if x_klad > 0 else "восток")
for i in range (abs(y_klad)):
    print ("север" if y_klad > 0 else "юг")
 
 
##########################################
 
print("стоп")
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 08:48 4
Если, что я хотел сначала как kravam код написать, но потом понял что CyberGame, только недавно в Python и поэтому написал максимально понятно (на мой взгляд)
1
203 / 90 / 15
Регистрация: 27.07.2018
Сообщений: 323
04.11.2018, 11:03  [ТС] 5
Glander, спасибо, а что означает запись x_y[0, 0] - массив какой-то?
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 11:15 6
Нет, это список состоящий из x и y (представь себе координатную плоскость x,y где x=0 и y=0 - начало координатной плоскости). И когда я обращаюсь к x_y[0], то обращаюсь к x, а если к x_y[1], то обращаюсь к y
1
203 / 90 / 15
Регистрация: 27.07.2018
Сообщений: 323
04.11.2018, 11:18  [ТС] 7
Glander, списки мы еще не проходили. Слушай, а можно ли это заменить на x = 0, y = 0 и просто в цикле подставить?
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 11:23 8
Кстати, CyberGame, там кнопочки есть +1 спс и ответ, не забудь нажать, мне будет приятно)

Добавлено через 4 минуты
Без списков, вот пожалуйста:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
the_minimum_number_of_instructions = 0
x = int(input())
y = int(input())
x1 = 0
y1 = 0
direction_of_movement = input()
if x == 0 and y == 0:
    print(0)
while direction_of_movement != 'стоп':
    steps = int(input())
    the_minimum_number_of_instructions += 1
    if direction_of_movement == 'север':
        y1 += steps
    elif direction_of_movement == 'запад':
        x1 -= steps
    elif direction_of_movement == 'юг':
        y1 -= steps
    elif direction_of_movement == 'восток':
        x1 += steps
    if int(x) == x1 and int(y) == y1:
        print(the_minimum_number_of_instructions)
        break
    direction_of_movement = input()
3
203 / 90 / 15
Регистрация: 27.07.2018
Сообщений: 323
04.11.2018, 11:52  [ТС] 9
Glander, кхм, задачку то вы не решили. смотри пример
Ввод
9
-2
Вперед
9
Налево
Вперед
2
=========
Вот так нужно было.
На подобие вашей, я уже делал.
Блин, внимательней условия прочитайте. Пожалуйста помогите(

Добавлено через 27 минут
Поднимаю!
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 12:33 10
Все переделал, вроде работает
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
the_minimum_number_of_instructions = 0
x = int(input())
y = int(input())
x1 = 0
y1 = 0
move = 'север'
direction_of_movement = input()
while direction_of_movement != 'стоп':
    if int(x) == x1 and int(y) == y1:
        print(the_minimum_number_of_instructions)
        print(move)
        break
    else:
        the_minimum_number_of_instructions += 1
        if direction_of_movement == 'вперёд':
            steps = int(input())
            if move == 'север':
                y1 += steps
            elif move == 'запад':
                x1 -= steps
            elif move == 'юг':
                y1 -= steps
            elif move == 'восток':
                x1 += steps
        elif direction_of_movement == 'направо':
            if move == 'север':
                move = 'восток'
            elif move == 'восток':
                move = 'юг'
            elif move == 'юг':
                move = 'запад'
            elif move == 'запад':
                move = 'север'
        elif direction_of_movement == 'налево':
            if move == 'север':
                move = 'запад'
            elif move == 'запад':
                move = 'юг'
            elif move == 'юг':
                move = 'восток'
            elif move == 'восток':
                move = 'север'
        elif direction_of_movement == 'разворот':
            if move == 'север':
                move = 'юг'
            elif move == 'юг':
                move = 'север'
            elif move == 'запад':
                move = 'восток'
            elif move == 'восток':
                move = 'запад'
        direction_of_movement = input()
else:
    if x == 0 and y == 0:
        print(0)
Добавлено через 5 минут
добавь в 56 строчку print('север')
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
04.11.2018, 13:40 11
Цитата Сообщение от CyberGame Посмотреть сообщение
Ввод
9
-2
Вперед
9
Налево
Вперед
2
это сумбур какой-то. И в какую точку мы так придём, позвольте спросить?
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 14:47 12
это косячный пример он привел...(В условии сказано:Гарантируется, что карта приводит к кладу). Я сделал как в условии написано. Вот нормальный пример:
-2
9
вперёд
9
налево
вперёд
2
разворот
стоп
Вывод моего кода:3
запад
все нормально работает

Добавлено через 42 секунды
А судя по его примеру мы к кладу не придем...
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
04.11.2018, 15:01 13
Glander, а у тебя где ввод?
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 15:06 14
пример = ввод

Добавлено через 3 минуты
Если так принципиально:
Ввод:
2
9
вперёд
9
налево
вперёд
2
разворот
стоп
Вывод:
3
запад
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
04.11.2018, 15:33 15
Я вот не пойму, а почему такой ввод? Если я правильно понимаю, вводом должно быть только координаты клада. Два числа. Как у меня. Всё! Остальное не пойми зачем нужно вводить.
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 18:09 16
А, ты не понимаешь... Так вот в условии говорится, что ты находишься в точке (0,0) и ты должен попасть в точку с кладом(которая не находится в (0,0), но чтобы туда попасть ты должен ввести команды чтобы передвигаться и попасть в точку с кладом (т.е. еще ввод (направление (вперед и сколько шагов)и повороты (налево, направо или развернуться))). Надеюсь понятно объяснил.

Добавлено через 2 минуты
Если мне не веришь посмотри
Формат ввода
Сначала вводятся два числа на отдельных строчках(это ввод): координаты клада по оси икс (запад-восток) и игрек (юг-север).
Затем следует некоторое количество указаний карты(и это тоже ввод). Каждое указание карты состоит из одного слова и, возможно, одного натурального числа на отдельной строке. Слово — одно из набора: «вперёд», «налево», «направо», «разворот» или «стоп».
0
203 / 90 / 15
Регистрация: 27.07.2018
Сообщений: 323
04.11.2018, 20:02  [ТС] 17
Glander, всё вроде правильно, только не работают примеры:
Ввод
-2
9
вперёд
9
налево
вперёд
2
разворот
вперёд
17
стоп
ВЫВОД
3
запад

Ввод
0
1
вперёд
2
разворот
вперёд
1
ВЫВОД
3
юг

Сам переделал, почти работает. Только он выводит не ту переменную the minimum number...
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
direction_of_movement = input()
while direction_of_movement != 'стоп':
    if (int(x) == x1 and int(y) == y1) and direction_of_movement == 'стоп':
        break
    else:
        the_minimum_number_of_instructions += 1
        if direction_of_movement == 'вперёд':
            steps = int(input())
            if move == 'север':
                y1 += steps
            elif move == 'запад':
                x1 -= steps
            elif move == 'юг':
                y1 -= steps
            elif move == 'восток':
                x1 += steps
        elif direction_of_movement == 'направо':
            if move == 'север':
                move = 'восток'
            elif move == 'восток':
                move = 'юг'
            elif move == 'юг':
                move = 'запад'
            elif move == 'запад':
                move = 'север'
        elif direction_of_movement == 'налево':
            if move == 'север':
                move = 'запад'
            elif move == 'запад':
                move = 'юг'
            elif move == 'юг':
                move = 'восток'
            elif move == 'восток':
                move = 'север'
        elif direction_of_movement == 'разворот':
            if move == 'север':
                move = 'юг'
            elif move == 'юг':
                move = 'север'
            elif move == 'запад':
                move = 'восток'
            elif move == 'восток':
                move = 'запад'
        direction_of_movement = input()
else:
    if x == 0 and y == 0:
        print(0)
        print('север')
print(the_minimum_number_of_instructions)
print(move)
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 20:18 18
А чем мой вариант плох? У меня эти примеры правильно работают
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 20:25 19
Вот скрины:

Изображения
 
0
14 / 11 / 3
Регистрация: 12.04.2018
Сообщений: 51
04.11.2018, 20:30 20
во втором нужно пару enter'ов нажать и будет вам вывод (это нормально, что вывод такой не переживай)

Добавлено через 2 минуты
И то, что ты переделал 100% работать не будет т.к. во-первых тыы должен запросить координаты клады,
во вторых the_minimum_number_of_instructions ты вывести не сможешь, т.к. он находится в цикле и еще много других ошибок...
Так, что не советую менять мой код)
0
04.11.2018, 20:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2018, 20:30
Помогаю со студенческими работами здесь

Ищем клад — 1
Задача

Ищем клад - 1
Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0) и...

Ищем клад — 1
Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0) и...

Ищем клад
Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0). Нам...

Задача "Ищем клад — 1"
Python Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0,...

Ищем Клад - 1
Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0) и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru