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

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

07.03.2019, 18:24. Показов 7239. Ответов 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
882 / 535 / 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru