Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-15 / 1 / 0
Регистрация: 26.01.2019
Сообщений: 34

Маршрутное такси

07.03.2019, 18:24. Показов 7319. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вы сидите на первом сидении в маршрутном такси. Проезд в маршрутке стоит 10 рублей. Вам передают купюры достоинством в 10, 50 и 100 рублей (с каждой купюры – на билет за одного пассажира). Часть из них вы можете сразу раздать в качестве сдачи (её можно выдать полностью или частично). Остальные купюры вы передаете водителю. Какое наименьшее количество купюр вам придется передать водителю?

Входные данные
Вводится три целых неотрицательных числа (каждое не превосходит 100) – количество 10-, 50- и 100-рублевых купюр, которые вам передали.

Выходные данные
Выведите одно число – наименьшее возможное количество купюр, которое придется передать водителю.
Примеры
входные данные
1 1 1
выходные данные
1
входные данные
9 0 2
выходные данные
2
python или pascal
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.03.2019, 18:24
Ответы с готовыми решениями:

Такси
Ограничение времени: 0.5 секунды Ограничение памяти: 64 МБ Петя любит ездить на такси. Для него это не только удовольствие от...

Смешарики и поездка на такси - 2
Смешарики вернулись после долгожданного отпуска, который они провели в солнечной Монголии. По возвращении в родную страну оказалось, что из...

Задача с codeforces "Беру-такси"
Рабочий Василий живёт в точке (a, b) координатной плоскости. Он очень торопится на работу, поэтому ему нужно как можно быстрее уехать из...

17
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
07.03.2019, 18:38
Егор Андреянов, вот пример. попробуйте сами для начала, может.
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
# A clerk works in a store where the cost of each item is a positive integer number of dollars. So, for example, something might cost  21,butnothingcosts21,butnothingcosts 9.99. In order to make change a clerk has an unbounded number of bills in each of the following denominations:  1,1, 2,  5,5, 10, and $20. Write a procedure that takes two arguments, the cost of an item and the amount paid, and prints how to make change using the smallest possible number of bills.
 
def make_change(cost, paid):
    global start_change, result
    change = paid - cost
    start_change = change
    money = (20, 10, 5, 2, 1)
    index = 0
    result = {}
    
    if change >= 1:
        while change != 0:
            if change // money[index] >= 1:
                result[money[index]] = change // money[index]
                change %= money[index] 
            index += 1        
    else:
        print('Change is not needed')
    return result
 
 
# Tests
make_change(5, 5)
make_change(1, 109)
 
if start_change >= 1:
    for bills, count in result.items():
print('Need {} bills for ${}.'.format(count, bills))
Добавлено через 9 минут
Похоже, алгоритм нужно подправить. Давно его делал..
0
-15 / 1 / 0
Регистрация: 26.01.2019
Сообщений: 34
07.03.2019, 18:58  [ТС]
решение помоему совершенно не то
0
-15 / 1 / 0
Регистрация: 26.01.2019
Сообщений: 34
08.03.2019, 10:56  [ТС]
я не знаю, алгоритм немного не понятный. обьясните его
0
-15 / 1 / 0
Регистрация: 26.01.2019
Сообщений: 34
09.03.2019, 12:13  [ТС]
Вы сидите на первом сидении в маршрутном такси. Проезд в маршрутке стоит 10 рублей. Вам передают купюры достоинством в 10, 50 и 100 рублей (с каждой купюры – на билет за одного пассажира). Часть из них вы можете сразу раздать в качестве сдачи (её можно выдать полностью или частично). Остальные купюры вы передаете водителю. Какое наименьшее количество купюр вам придется передать водителю?

Входные данные
Вводится три целых неотрицательных числа (каждое не превосходит 100) – количество 10-, 50- и 100-рублевых купюр, которые вам передали.

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

Примеры
входные данные
1 1 1
выходные данные
1
входные данные
9 0 2
выходные данные
2
Python
1
2
3
4
5
6
7
8
a, b, c = input().split(" ")
a = int(a)
b = int(b)
c = int(c)
if (a*10+b*50)<(c*100):
    print(c)
elif (a*10+b*50)>(c*100):
    print(a+b)
не проходит по 2 тестам, вот ссылка на тестирование(не пиар)
https://informatics.mccme.ru/m... erid=776#1
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
09.03.2019, 13:48
Цитата Сообщение от Егор Андреянов Посмотреть сообщение
elif (a*10+b*50)>(c*100): print(a+b)
А куда сотенные купюры деваются, если их не отдают водителю? Пассажир присваивает их себе или возвращает их тем от кого получил и они едут бесплатно?
Рассмотрим пример 5 2 1. Ваш код дает ответ 7, это не верно.
Даю сдачи на 100р _10*4_50*1, на 50р_10*1. Передаю водителю одну купюру 100р и одну купюру 50р. Ответ 2.
0
-15 / 1 / 0
Регистрация: 26.01.2019
Сообщений: 34
09.03.2019, 14:43  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Даю сдачи на 100р _10*4_50*1, на 50р_10*1. Передаю водителю одну купюру 100р и одну купюру 50р. Ответ 2.
Щас проверю

Добавлено через 7 минут
я понял, что все едут "бесплатно" но как это исправить???

Добавлено через 23 минуты


Добавлено через 18 секунд
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
09.03.2019, 16:00
Егор Андреянов,
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
L = input().split()
a, b, c = int(L[0]), int(L[1]), int(L[2])
 
n = a + b + c
k = n * 10
l = 0
 
def change(j, n, k):
  global l
  for i in range(1, j+1):
    if i * n >= k:
      print(i+l)
      break
  else: 
    k -= j * n
    l += j
    return k
 
if c > 0:
  k = change(c, 100, k)
if b > 0 and k:
  k = change(b, 50, k)
if a > 0 and k:
  k = change(a, 10, k)
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
09.03.2019, 17:08
Лучший ответ Сообщение было отмечено Егор Андреянов как решение

Решение

Если исправить Ваш код, то будет так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a, b, c = input().split()
a = int(a)
b = int(b)
c = int(c)
if (a*10+b*50)<(c*100) and b<=c:
    print(c)
elif (a*10+b*50)<(c*100) and b>c:
    print(b)                          # print(c+(b-c))
elif (a*10+b*50)>(c*100) and b<=c and (a-8*b-9*(c-b))>0:
    print(c+(a-8*b-9*(c-b)))          # print(c+(a-4*b-4*b-9*(c-b))) второе 4*b это сдача на 100р 
                                      # на которые была сдача 50р
elif (a*10+b*50)>(c*100) and b<=c and (a-8*b-9*(c-b))<=0:
    print(c)
elif (a*10+b*50)>(c*100) and b>c and (a-4*b-4*c)>0:
    print(b+(a-4*b-4*c))                # print(c+(b-c)+(a-4*b-4*c))
elif (a*10+b*50)>(c*100) and b>c and (a-4*b-4*c)<=0:
    print(b)
Хотя проверки
Python
1
2
3
4
(a-8*b-9*(c-b))>0
(a-8*b-9*(c-b))<=0
(a-4*b-4*c)>0
(a-4*b-4*c)<=0
может быть излишни, но разбираться лень.
Во всяком случае ответ они не искажают.

Добавлено через 3 минуты
Но если их убрать, то нужно убирать и строки 12,13 и 16,17

Добавлено через 29 минут
m0nte-cr1st0,
Вот пример на который Ваш код дает неверный ответ
1 8 7
отдаем сдачи 1 купюра 10р, 7 купюр 50р. Остается и передается водителю 1 купюра 50р и 7 купюр 100. Ответ 8.
У Вас выдает ответ 2.

И вот еще примеры
5 2 1 Ответ 2. У Вас выдает 1.

12 1 1 Ответ 5. У Вас выдает 2.
1
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
09.03.2019, 17:57
Кажется, вы слишком углубились. Читаем внимательно условие.
Цитата Сообщение от Егор Андреянов Посмотреть сообщение
Часть из них вы можете сразу раздать в качестве сдачи (её можно выдать полностью или частично). Остальные купюры вы передаете водителю. Какое наименьшее количество купюр вам придется передать водителю?
то есть, акцент делается на минимально количество купюр, которые нужно передать водителю, чтобы оплатить проезд пассажиров.
смотрим приведённый Вами пример: 1 8 7 = 160р.
так как у нас есть купюры номиналом 100р, то берём их - достаточно 2 купюры, чтобы заплатить за проезд. (а пассажиры уже сами там разберутся со сдачей)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
09.03.2019, 18:17
m0nte-cr1st0, Я в своем первом варианте кода, тоже купился на неверный алгоритм, который предлагаете Вы.
У нас 7 купюр по 100р. Кому Вы их можете отдать в виде сдачи? Никому. Поэтому они все уйдут водителю, и вместо них он уже передаст в салон мелкие купюры для сдачи. И так далее. Неужели это не понятно?.

Добавлено через 6 минут
В условии не рассматривается вариант, сколько купюр водитель вернет назад. Тем более не известно купюры какого достоинства он будет возвращать, тут множество вариантов. Поэтому в условии не говорится, что из количества купюр переданных водителю нужно вычитать количество купюр возвращенное им.
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
09.03.2019, 18:22
Цитата Сообщение от Viktorrus Посмотреть сообщение
У нас 7 купюр по 100р. Кому Вы их можете отдать в виде сдачи?
Исходя из логики и из жизни Вы правы, конечно.
Но если сделать приоритет на водителя, то достаточно одной купюры номиналом 100р, чтобы оплатить проезд за 7 человек, даже если все передали купюры по 100р. То есть ты даешь водителю одну купюру, он тебе отдаёт 30р, а дальше пассажиры уже разбираются между собой.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
09.03.2019, 18:33
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
То есть ты даешь водителю одну купюру, он тебе отдаёт 30р, а дальше пассажиры уже разбираются между собой.
Если Вы даете водителю одну купюру 100р, то куда Вы денете остальные 6, к себе в карман? Кстати кто дал купюры по 100р, им нужно вернуть 7*90=630р. Вы их достанете из своего кармана? В задаче предполагается, что их даст водитель взамен семи купюр по 100р. Как Вы не выкручивайтесь, а водителю 7 купюр по 100р отдайте. А то если их присвоите, то Вас в тюрьму посадят, или пассажиры побьют
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
09.03.2019, 18:38
Цитата Сообщение от Viktorrus Посмотреть сообщение
Если Вы даете водителю одну купюру 100р, то куда Вы денете остальные 6, к себе в карман?
обратно тем 6 человекам. а затем тот, чья сотка ушла водителю, будет сбивать остальные свои законные 60р с оставшихся 6 человек, как бы это смешно не звучало
главное, что водителю ушло минимальное количество купюр)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
09.03.2019, 18:50
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
обратно тем 6 человекам. а затем тот, чья сотка ушла водителю, будет сбивать остальные свои законные 60р с оставшихся 6 человек, как бы это смешно не звучало
Но тогда Вы нарушаете условие задачи и из пассажиров только один даст купюру 100р, а не 7. Это уже другой пример. А приведенный мною пример ваш код не решает. С чего Вы взяли, что у пассажиров давших 100р есть и мелкая валюта. А у водителя она всегда есть, что бы он мог сдать сдачу. В общем это все Ваши фантазии искажающие условие данное в задании.
Извините, у меня уже больше нет сил Вам объяснять. Удачи.
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
09.03.2019, 18:55
Viktorrus, вы не поняли, о чём я. Эх(
0
0 / 0 / 0
Регистрация: 30.09.2025
Сообщений: 2
30.09.2025, 00:39
Уже неактуально, однако если кто-то в будущем сюда заглянет - значит я всё же не зря старался
Python
1
2
3
4
5
6
7
8
9
10
c1, c5, c10 = list(map(int, input().split()))
sdac10 = c10
sdac5 = (c5 + c10)*4
c1 = (c1 - sdac5) * (sdac5 < c1)
sdac10p = (sdac10 - c1) * (c1 < sdac10)
c1p = (c1 - sdac10) * (sdac10 < c1)
sdac10 = sdac10p
c1 = c1p
c5 = (c5 - sdac10) * (sdac10 < c5)
print(c1 + c5 + c10)
А теперь разбор по строчкам(для примера возьмём значения 1 8 7):
1 - получаем переменные
2 - максимальное количество купюр в 50 рублей, которые мы хотим сразу отдать(7 пассажиров передают по 100 рублей => мы можем отдать им сдачу либо 10 купюрами по 10, либо 4 купюрами по 10 и 1 в 50, в данном случае 7)
3 - минимальное количество купюр в 10 рублей, которые мы хотим сразу отдать(к 50 от 100 добавляем 40 и сдача с 5 тоже 40, выносим общий множитель 4, в данном случае получаем (8+7)*4 = 60 - то есть, чтобы выдать сдачу пассажирам, мне нужно как минимум 60 купюр по 10 рублей)
4 - считаем оставшиеся после сдачи купюры в 10 рублей(в данном случае (1 - 60)*(60<1) = 0)
5 - если бы у нас было 10 рублёвых купюр больше, чем 60, мы бы попытались использовать их вместо купюр по 50(мы это делаем, потому что так вместо 5 купюр по 10 мы передадим водителю 1 в 50 рублей, в данном случае 0)
6 - считаем остаток купюр в 10 рублей после пункта 5(в данном случае 0)
7, 8 - мы приравниваем основные переменные к дополнительным(доп переменные введены, потому что 5 и 6 пункт должны считаться независимо друг от друга)
9 - теперь, когда у нас закончились купюры в 10 рублей, мы пытаемся втюхать 50 рублей всем, кто отдал нам 100(в данном случае (8 - 7)*(7 < 8) = 1)
10 - Складываем оставшиеся у нас на руках купюры(которые мы и отдадим водителю)

Что-то мне подсказывает, что этот код можно было и покороче сделать, но я уже 3 часа с этой задачей мумукаюсь, так что мне лень, всё равно у меня получилось короче, чем любой другой код в этой теме(к тому этот код проходит все тесты)
0
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
30.09.2025, 11:06
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
def simple_solution():
    n10, n50, n100 = map(int, input().split())
    
    total_people = n10 + n50 + n100
    total_money = n10 * 10 + n50 * 50 + n100 * 100
    ticket_price = 10
    
    # Если денег не хватает
    if total_money < total_people * ticket_price:
        return n10 + n50 + n100
    
    # Сдача
    change = total_money - total_people * ticket_price
    
    # Максимально используем 50-рублевые для сдачи
    use_50 = min(n50, change // 50)
    change -= use_50 * 50
    
    # Затем 10-рублевые
    use_10 = min(n10, change // 10)
    change -= use_10 * 10
    
    # Если не смогли выдать всю сдачу, придется отдать лишние купюры
    if change > 0:
        # Значит, мы не смогли оптимально выдать сдачу
        # В этом случае минимальное количество - отдать только 100-рублевые
        # плюс необходимые мелкие для покрытия стоимости
        return (total_people * ticket_price + 99) // 100
    else:
        return n100 + (n50 - use_50) + (n10 - use_10)
 
# Используем этот вариант
print(simple_solution())
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2025, 11:06
Помогаю со студенческими работами здесь

Такси
Ограничение по времени работы программы: 1 секунда После затянувшегося совещания директор фирмы решил заказать такси, чтобы развезти...

Такси
После затянувшегося совещания директор фирмы решил заказать такси, чтобы развезти сотрудников по домам. Он заказал N машин — ровно столько,...

Расчет платы за поездку на такси
Представьте, что сумма за пользование услугами такси складывается из базового тарифа в размере $4,00 плюс $0,25 за каждые 140 м поездки....

Бот для Яндекс Такси
Здравствуйте. В процессе разработки бота который должен делать фейковые заказы для увеличения рейтинга водителям, возникла проблема которую...

У каждого водителя такси свой тариф за 1 километр. Сколько придется заплатить за перевозку всех сотрудников?
После затянувшегося совещания директор фирмы решил заказать такси, чтобы развезти сотрудников по домам. Он заказал N машин — ровно столько,...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru