Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918

Снежки

09.03.2021, 17:59. Показов 4019. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообще не понял условия задачи. В каких случаях какой с каким из снежков сталкиваются? что происходит? Может кто-то, пожалуйста, объяснить принцип выбора снежков для столкновения? Как они могут столкнуться если летят в противоположных направлениях с одной и той же скоростью?...


Поиграем в снежки! Размер снежка будем обозначать числом, а направление броска – знаком числа. Положительные двигаются вправо, отрицательные влево. Будем считать, что бросать снежки мы можем только с одинаковой скоростью. Поэтому рядом расположенные снежки с одинаковыми знаками никогда не встретятся.

Если встречаются два снежка разных размеров, то меньший разрушается и остается только больший, который продолжает двигаться в прежнем направлении. Если размеры одинаковы, то разрушаются оба.

Напишите программу, которая выведет снежки, которые останутся после всех столкновений.

Формат ввода
Вводится количество целых чисел, затем сами числа, каждое с новой строки.

Нулей среди введенных чисел нет.

Формат вывода
В одну строку через пробел вывести все оставшиеся после столкновений числа.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2021, 17:59
Ответы с готовыми решениями:

Снежки
Поиграем в снежки! Размер снежка будем обозначать числом, а направление броска – знаком числа. Положительные двигаются вправо,...

Снежки
Делаю игру снежки на PyGame, написал движение с клавиатуры игрока , а когда пишу код случайного передвижения врага по оси х то он очень...

Снежки не запускаются, ошибка с virtual memory
При запуске снежек вылетает такое вот окно. Что сделать чтобы игра запустилась?


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

Или воспользуйтесь поиском по форуму:
16
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
09.03.2021, 18:34
alilxxey, я понял так [-2, 3, -4] -> -2, -4
[-2, 3, -1] -> -2, 3
[3, -2, -1] -> 3
0
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
09.03.2021, 18:38  [ТС]
Gdez, то есть сталкиваются снежки, брошенные подряд в разные стороны? Не вижу логики в ваших примерах
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
09.03.2021, 19:28
alilxxey, первый пример -> -2 движется влево - там чисел нет - оставляем
Следующее число 3 - движется вправо и ему "навстречу" число -1; так как по модулю 3 больше, то остается число 3.
Дальше чисел нет - дошли до конца списка; вывод чисел -2, 3
0
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
09.03.2021, 19:36  [ТС]
Gdez, т. е. смотрим по парам?.. извините, конечно, что туплю, но не совсем догоняю

Добавлено через 6 минут
Gdez, я кажется понял. Мы просто проходим вперед по списку снежков и разбиваем/оставляем их. А в случае если подряд идут два снежка одного знака (нулевой и первый элемент), мы рассматриваем толко [1]. Верно?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
09.03.2021, 20:42
Лучший ответ Сообщение было отмечено alilxxey как решение

Решение

alilxxey, Может так?
переворачиваем список lst
1.вытаскиваем lst.pop() последний элемент: (пусть а1)
если <0, то его в результирующий res; и так, пока не "найдем" > 0
2.вытаскиваем lst.pop() последний элемент: (пусть а2)
если а2>0, то а1 в tmp, а1 = а2 и повторяем (2) пока не получим а2<0
3.сравниваем по модулю:
3.1. если |а2| > |а1|, то a1 = a2 ; "вытаскиваем" из tmp -> а1 = tmp.pop();
3.2. продолжаем пока есть tmp и |а2|>|а1|;
3.3. при выходе если а1<0, то добавляем в res и повторяем (1) (2)
4. если исходный список lst пустой (дошли до конца), вывод res + tmp
1
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
09.03.2021, 20:51  [ТС]
Gdez, примерно понял ваш алгоритм. Сейчас разбираюсь и пишу программу, спасибо!

Добавлено через 8 минут
Gdez, я запутался.. Вот
Цитата Сообщение от Gdez Посмотреть сообщение
1.вытаскиваем lst.pop() последний элемент: (пусть а1)
если <0, то его в результирующий res; и так, пока не "найдем" > 0
2.вытаскиваем lst.pop() последний элемент: (пусть а2)
если а2>0, то а1 в tmp, а1 = а2 и повторяем (2) пока не получим а2<0
это я правильно реализовал?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
k = int(input())
a = []
res = []
tmp = []
for i in range(k):
    a.append(int(input))
a.reverse()
 
while len(a) > 0:
    z = a.pop(-1)
    if z < 0:
        res.append(z)
    if z > 0 and len(res) > 0:
        tmp.append(res[-1])
        res[-1] = z
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
09.03.2021, 21:04
alilxxey, я не уверен, что алгоритм оптимален, но, если реализовать, то первые два пункта
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
k = int(input())
a = []
res = []
tmp = []
for i in range(k):
    a.append(int(input))
a.reverse()
z = a.pop()
 
while len(a) > 0:
    while z < 0 and len(a) > 0:
        res.append(z)
        z = a.pop()
    y = a.pop()
    while y > 0 and len(a) > 0:
        tmp.append(z)
        z = y
        y = a.pop()
1
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
09.03.2021, 21:28  [ТС]
Gdez, я пишу какой то полный бред. Логично, ничего не получается..

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
def l(tmp, res, z, y):
    while len(tmp) > 0 and (abs(y) > abs(z) or z < 0):
        if z < 0:
            res.append(z)
        z = tmp.pop()
    return tmp, res, z, y
 
k = int(input())
a = []
res = []
tmp = []
for i in range(k):
    a.append(int(input()))
a.reverse()
z = a.pop()
 
while len(a) > 0:
    while z < 0 and len(a) > 0:
        res.append(z)
        z = a.pop()
    y = a.pop()
    while y > 0 and len(a) > 0:
        tmp.append(z)
        z = y
        y = a.pop()
        tmp, res, z, y = l(tmp, res, z, y)
 
 
print(z, y)
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
12.03.2021, 00:07
Gdez, можете реализовать полностью, пожалуйста
Я написал обычным for и КУЧЕЙ if, но работают только примеры из условия, дальше валится
0
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
12.03.2021, 00:12  [ТС]
gray621, покажи код свой пожалуйста
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
12.03.2021, 06:31
ограничения какие на входные данные?
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
12.03.2021, 17:43
eaa, нулей нет, вот и все

Добавлено через 3 часа 49 минут
в этой задачи вообще условие не понятно, почему в 4 примере не разрушается 1 если до него были -1 и -5?

Добавлено через 2 часа 9 минут
Gdez, я не понимаю условие задачи
0
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
12.03.2021, 19:25  [ТС]
gray621,
Цитата Сообщение от Gdez Посмотреть сообщение
Может так?
переворачиваем список lst
1.вытаскиваем lst.pop() последний элемент: (пусть а1)
если <0, то его в результирующий res; и так, пока не "найдем" > 0
2.вытаскиваем lst.pop() последний элемент: (пусть а2)
если а2>0, то а1 в tmp, а1 = а2 и повторяем (2) пока не получим а2<0
3.сравниваем по модулю:
3.1. если |а2| > |а1|, то a1 = a2 ; "вытаскиваем" из tmp -> а1 = tmp.pop();
3.2. продолжаем пока есть tmp и |а2|>|а1|;
3.3. при выходе если а1<0, то добавляем в res и повторяем (1) (2)
4. если исходный список lst пустой (дошли до конца), вывод res + tmp
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
12.03.2021, 19:52
alilxxey, я не хочу решать эту задачу, т.к. условие непонятное
0
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
12.03.2021, 19:53  [ТС]
gray621,
0
3 / 3 / 0
Регистрация: 27.01.2021
Сообщений: 12
14.03.2021, 23:26
А в итоге кто-то решил эту задачу правильно?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru