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

Маршрутка

08.03.2019, 19:50. Показов 2980. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вы сидите на первом сидении в маршрутном такси. Проезд в маршрутке стоит 10 рублей. Вам передают купюры достоинством в 10, 50 и 100 рублей (с каждой купюры – на билет за одного пассажира). Часть из них вы можете сразу раздать в качестве сдачи (её можно выдать полностью или частично). Остальные купюры вы передаете водителю. Какое наименьшее количество купюр вам придется передать водителю?
Примеры
входные данные
1 1 1
выходные данные
1
входные данные
9 0 2
выходные данные
2
питон
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2019, 19:50
Ответы с готовыми решениями:

Маршрутка, задача
Вы сидите на первом сидении в маршрутном такси. Проезд в маршрутке стоит 10 рублей. Вам передают купюры достоинством в 10, 50 и 100 рублей...

Маршрутка переменных между классами
У меня есть проект с классами (.cs) они управляются из основного класса (program.cs) Можно ли сделать так чтобы класс после выполнения...

Что с большей вероятностью придет раньше: автобус или маршрутка?
Автобус приходит на остановку каждые 15 минут, а маршрутка — каждые 10 минут. Известно, что маршрутка ушла с остановки 2 минуты назад. Что...

5
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
09.03.2019, 04: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 = list(map(int, input('Через пробел количество купюр 10,50,100 руб.: ').split()))
 
n = sum(L)        # количество пассажиров
s = n*10          # оплата за всех пасажиров
k = 0             #  наименьшее количество купюр переданных водителю
if L[2] > 0:
    for i in range(L[2]):
        k += 1
        s -= 100
        if s <= 0:
            break
if s > 0 and L[1] > 0:
    for i in range(L[1]):
        k += 1
        s -= 50
        if s <= 0:
            break
if s > 0:
    for i in range(L[0]):
        k += 1
        s -= 10
        if s <= 0:
            break
print('Наименьшее количество купюр переданных водителю: ', k)
Может кто то сделает компактнее.

Добавлено через 2 часа 34 минуты
Мой сценарий использовал не верный алгоритм. Он выдает неверный ответ в случае 1 0 2 # 1, а должно быть 2.

Вот правильный алгоритм:
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
L = list(map(int, input('Через пробел количество купюр 10,50,100 руб.: ').split()))
 
n = sum(L)                   # количество пассажиров
P10 = L[0]                   # количество купюр по 10 руб. находящихся у меня.
P50 = L[1]                   # количество купюр по 50 руб. находящихся у меня.
P100 = L[2]                  # количество купюр по 100 руб. находящихся у меня.
if L[2] > 0:                 # купюры по 100 руб. на которые я должен дать сдачи.
    for i in range(L[2]):
        O = 100
        if P50 > 0:
            P50 -= 1
            O -= 50
        if P10 > 0:
            for j in range(P10):
                if O > 10:
                    P10 -= 1
                    O -= 10
                else:
                    break
if L[1] > 0:                   # купюры по 50 руб. на которые я должен дать сдачи.
    for i in range(L[1]):
        O = 50
        if P10 > 0:
            for j in range(P10):
                if O > 10:
                    P10 -= 1
                    O -= 10
                else:
                    break
 
print('Количество купюр переданных водителю: ', P10+P50+P100)
1
0 / 0 / 0
Регистрация: 08.03.2019
Сообщений: 2
09.03.2019, 11:48  [ТС]
Спасибо! А это можно сделать без циклов?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
09.03.2019, 13:55
Антон2006, Алгоритм, который я использовал, предполагает циклы. Другого алгоритма, без циклов, я не вижу.
Как сдавать сдачу со 100р и с 50р без цикла? Можно конечно вместо циклов использовать только if. Но это сколько шагов в цикле, столько должно быть if_ов. Бред полный. Такими искусственными приемами не занимаюсь. Как по другому не представляю. Может кто то другой сделает.

Добавлено через 4 минуты
В соседней теме без циклов сделано и компактно.
Python
1
https://www.cyberforum.ru/python-beginners/thread2415791.html
Добавлено через 55 минут
Цитата Сообщение от Viktorrus Посмотреть сообщение
В соседней теме без циклов сделано и компактно.
Хотя там не верно считает. В примере 5 2 1 там дает ответ 7, хотя должно быть 2.
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
09.03.2019, 15:58
Антон2006,
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)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
09.03.2019, 17:06
Вот код без циклов
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)
Добавлено через 5 минут
Хотя проверки
Python
1
(a-8*b-9*(c-b))>0
Python
1
(a-8*b-9*(c-b))<=0
Python
1
(a-4*b-4*c)>0
Python
1
(a-4*b-4*c)<=0
может излишни, но разбираться лень.
Во всяком случае ответ они не искажают.

Добавлено через 39 минут
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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2019, 17:06
Помогаю со студенческими работами здесь

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru