С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 28.03.2024
Сообщений: 68

Билет на автобус

06.04.2024, 15:23. Показов 3044. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Билет на одну поездку на автобусе стоит 30 рублей, билет на 5 поездок 120 рублей, билет на 10 поездок стоит 235 рублей, билет на 20 поездок 420 рублей, а билет на 60 поездок стоит 1005 рублей.
Пассажир планирует совершить n поездок. Определите, сколько билетов каждого вида он должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше n, а общая стоимость
приобретенных билетов минимальна.

Формат входных данных

Дано одно натуральное число

n (1≤n≤109) — количество поездок.

Формат результата

Выведите пять целых чисел, равные необходимому количеству билетов на

1, на 5, на 10, на 20, на 60 поездок.

Примеры

Входные данные
131

Результат работы

1 0 1 0 2
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2024, 15:23
Ответы с готовыми решениями:

Билет на автобус междугороднего направления
Подскажите я ничего по полям не упустил? Пункт отправления/прибытия, время отправления/прибытия, цена, размер.

Класс "Автобус". Пересадить всех людей во 2 автобус
Легла в больницу на 1 месяц, когда вернулась преподаватель по Алгоритмическим языкам, сказал чтоб я составила эту программу или не допустит...

Билет на одну поездку в метров стоит 15р, билет на 10 поездок стоит 125р, на 60 поездок 440
Билет на одну поездку в метров стоит 15р, билет на 10 поездок стоит 125р, на 60 поездок 440. Пассажир планирует совершить n поездок....

12
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
06.04.2024, 16:05
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
n=int(input())
 
k60=0
while n >= 60:
    k60+=1
    n=n-60
    
k20=0
while n >= 20:
    k20+=1
    n=n-20
 
k10=0
while n >= 10:
    k10+=1
    n=n-10
 
k5=0
while n >= 5:
    k5+=1
    n=n-5
 
k1=0
while n >= 1:
    k1+=1
    n=n-1
 
print((k1,k5,k10,k20,k60))
4
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
06.04.2024, 16:53
Catstail, можно больше билетов покупать, например, на 9 поездок пачку из 10 билетов за 235. Задачи, кстати, с курса Информатика решает (4 модуль, условный оператор, до циклов)
2
 Аватар для ANT0NY
104 / 50 / 9
Регистрация: 06.01.2024
Сообщений: 383
06.04.2024, 17:06
Можно упростить как
Python
1
2
k60 = n // 60
n %= 60
и далее по списку.
1
0 / 0 / 0
Регистрация: 28.03.2024
Сообщений: 68
06.04.2024, 17:10  [ТС]
нужно решить задачу используя тему условный оператор
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
06.04.2024, 17:17
Aael, да, я и чувствовал, что жадный алгоритм тут может сплоховать...
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
07.04.2024, 02:21
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
nn = int(input('n = '))
n = nn
v = [1, 5, 10, 20, 60]
k = [0, 0, 0, 0, 0]
cost = [30, 120, 235, 420, 1005]
for i in range(4, 0-1, -1):
    k[i], n = divmod(n, v[i])
 
for p in range(1, len(v)):
    if sum(k[i]*cost[i] for i in range(p)) > cost[p]:
        k[0:p] = [0]*p
        k[p] += 1
print(*k)
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
07.04.2024, 08:18
ANT0NY, да, конечно.
Aael, пробую "спасти" свое решение:

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
price=((30,120,235,420,1005))
 
def tot(v,price):
    return sum(map(lambda x: x[0]*x[1],zip(v,price)))
 
n=int(input("n="))
 
k60=n//60
n=n%60
 
k20=n//20
n=n%20
 
k10=n//10
n=n%10
 
k5=n//5
k1=n%5
 
q=[0]*5
 
q[0]=(k1,k5,k10,k20,k60)
s1=tot(price,q[0])
 
q[1]=(0,0,0,0,k60+1)
s2=tot(price,q[1])
 
q[2]=(0,0,0,k20+1,k60)
s3=tot(price,q[2])
 
q[3]=(0,0,k10+1,k20,k60)
s4=tot(price,q[3])
 
q[4]=(0,k5+1,k10,k20,k60)
s5=tot(price,q[4])        
 
mins=min((s1,s2,s3,s4,s5))
k=(s1,s2,s3,s4,s5).index(mins)
print(q[k])
print(mins)
2
Вирусоборец
 Аватар для thyrex
14437 / 7479 / 1579
Регистрация: 06.09.2009
Сообщений: 27,113
07.04.2024, 10:40

Не по теме:

Не защитают ведь с циклами и функциями

0
 Аватар для VistaSV30
986 / 330 / 79
Регистрация: 10.04.2012
Сообщений: 1,239
Записей в блоге: 4
07.04.2024, 14:55
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
N = int(input('Введите количество поездок: '))
a = []
v = [60, 20, 10, 5, 1]  # Виды проездных
 
for i in v:
    if N // i > 0:
        a.append(N // i)
        N %= i
    else:
        a.append(0)
 
print('\nНеобходимо купить следующий набор проездных:')
print('Количество\nПоездок Билетов')
for i, _ in enumerate(a):
    print(f'{v[i]} \t {a[i]}')
Добавлено через 9 минут
Чтоб было по условию задачи:
Python
1
2
3
4
5
6
7
8
9
10
11
N = int(input())
a = []
 
for i in [60, 20, 10, 5, 1] :
    if N // i > 0:
        a.append(N // i)
        N %= i
    else:
        a.append(0)
 
print(*a[::-1])
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
07.04.2024, 16:28
Цитата Сообщение от VistaSV30 Посмотреть сообщение
Чтоб было по условию задачи:
N = int(input())
a = []
for i in [60, 20, 10, 5, 1] :
if N // i > 0:
a.append(N // i)
N %= i
else:
a.append(0)
print(*a[::-1])
VistaSV30, задача на самом деле сложнее.
Вот вывод наших с вами решений, у вас неправильно в основном количества, которые оканчиваются на 8 и 9, иногда на 7,
например 9, 18, 19, 29 и т.д.
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
#nn = int(input('n = '))
for nn in range(60+1):
    print(nn)
    n = nn
    v = [1, 5, 10, 20, 60]
    k = [0, 0, 0, 0, 0]
    cost = [30, 120, 235, 420, 1005]
    for i in range(4, 0 - 1, -1):
        k[i], n = divmod(n, v[i])
 
    for p in range(1, len(v)):
        if sum(k[i] * cost[i] for i in range(p)) > cost[p]:
            k[0:p] = [0] * p
            k[p] += 1
    print(*k)
 
    N = nn
    a = []
 
    for i in [60, 20, 10, 5, 1]:
        if N // i > 0:
            a.append(N // i)
            N %= i
        else:
            a.append(0)
 
    print(*a[::-1])
    print()
    print()
0
Вирусоборец
 Аватар для thyrex
14437 / 7479 / 1579
Регистрация: 06.09.2009
Сообщений: 27,113
07.04.2024, 18:38
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Без циклов, списков. Всё согласно купленных билетов условия.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
t = int(input())
c60, c20, c10, c5, c1 = 1005, 420, 235, 120, 30
t60, t = divmod(t, 60)
t20, t = divmod(t, 20)
t10, t = divmod(t, 10)
t5, t1 = divmod(t, 5)
if t1*c1 >= c5:
    t5 += 1
    t1 = 0
if t5*c5+t1*c1 >= c10:
    t10 += 1
    t5 = t1 = 0
if t10*c10+t5*c5+t1*c1 >= c20:
    t20 += 1
    t10 = t5 = t1 = 0
if t20*c20+t10*c10+t5*c5+t1*c1 >= c60:
    t60 += 1
    t20 = t10 = t5 = t1 = 0
print(t1, t5, t10, t20, t60)
2
 Аватар для VistaSV30
986 / 330 / 79
Регистрация: 10.04.2012
Сообщений: 1,239
Записей в блоге: 4
08.04.2024, 10:06
Цитата Сообщение от idealist Посмотреть сообщение
задача на самом деле сложнее
По моему алгоритму в некоторых вариантах будет переплата в среднем на 3%
Кликните здесь для просмотра всего текста
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
56
57
def ticket(t):
    tn = t
    c60, c20, c10, c5, c1 = 1005, 420, 235, 120, 30
    t60, t = divmod(t, 60)
    t20, t = divmod(t, 20)
    t10, t = divmod(t, 10)
    t5, t1 = divmod(t, 5)
    if t1*c1 >= c5:
        t5 += 1
        t1 = 0
    if t5*c5+t1*c1 >= c10:
        t10 += 1
        t5 = t1 = 0
    if t10*c10+t5*c5+t1*c1 >= c20:
        t20 += 1
        t10 = t5 = t1 = 0
    if t20*c20+t10*c10+t5*c5+t1*c1 >= c60:
        t60 += 1
        t20 = t10 = t5 = t1 = 0
    print(tn, '\t', t1, t5, t10, t20, t60, end= '|')
    sum1 = t1 * c1 + t5 * c5 + t10 * c10 + t20 * c20 + t60 * c60
    # =================================================
    
    N = tn
    a = []
 
    for i in [60, 20, 10, 5, 1] :
        if N // i > 0:
            a.append(N // i)
            N %= i
        else:
            a.append(0)
 
    print(*a[::-1], end='|')
    sum2 = a[4] * c1 + a[3] * c5 + a[2] * c10 + a[1] * c20 + a[0] * c60
    # ========================================
    
    n = tn
    v = [1, 5, 10, 20, 60]
    k = [0, 0, 0, 0, 0]
    cost = [30, 120, 235, 420, 1005]
    for i in range(4, 0 - 1, -1):
        k[i], n = divmod(n, v[i])
 
    for p in range(1, len(v)):
        if sum(k[i] * cost[i] for i in range(p)) > cost[p]:
            k[0:p] = [0] * p
            k[p] += 1
    print(*k, end='\t')
    sum3 = k[0] * c1 + k[1] * c5 + k[2] * c10 + k[3] * c20 + k[4] * c60
    
    print(f'{sum1}\t{sum2}\t{sum3}')
 
 
print('N\t thyrex   |VistaSV30|idealist\tСтоимость')
for i in range(1, 600):
    ticket(i)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2024, 10:06
Помогаю со студенческими работами здесь

Является ли данный билет счастливым? Счастливым считается билет, если сумма трех левых цифр равна сумме трех правых цифр
1. На билете пять цифр - номер билета. Является ли данный билет счастливым? Счастливым считается билет, если сумма трех левых цифр равна...

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

Едущий автобус
Привет! У меня трудности с Flash( срочно нужна помощь. Нужно сделать едущий автобус. Я поставил на сцену город, он типа движется. и дорога...

Анимация, автобус
Создать программу для отображения анимации. Движение заданного объекта должно осуществляться в заданном направлении с ограничением областью...

Задача Автобус
В Берляндии плачевная ситуация с междугородним автобусным сообщением. Во всей стране есть всего три автобусных маршрута, по каждому из...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru