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

Слон или не слон?

20.12.2021, 22:34. Показов 11690. Ответов 11

Студворк — интернет-сервис помощи студентам
Условие
Три слепых мудреца ощупывают предмет и пытаются понять, слон это все-таки или не слон? Всем известно, что у слонов обычно бывают:

один хобот;
один хвост;
4 ноги;
2 уха;
2 глаза;
1 рот.

Ну бывают еще бивни, но это как получится, у кого-то уже сломались, у кого-то еще не выросли. Бивни (и другие части тела) считать не будем, они не определяющие.

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

Формат ввода
Вводятся пары строк, в первой из которых стоит целое число — количество нащупанных частей тела, во второй — название части тела, количество которой ощупали в предыдущей строке. До тех пор, пока не будет вместо части тела введено слово ОБЕД.

Формат вывода
Если получился хотя бы один полнокомплектный слон, то ввод данных нужно прекратить и вывести: Есть слон! и их количество.
Если до появления слова ОБЕД вместо названия так ни одного целого слона и не нашли, вывести: Какие-то слоны нецелые. Пошли обедать.

Пример 1
Ввод
1
нога
1
рот
2
хобот
3
нога
2
бивень
2
ухо
2
глаз
1
хвост
4
нога
4
ОБЕД

Вывод
Есть слон!
1

Вот мой код:
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
def solution():
    trunks = tails = legs = ears = mouths = eyes = 0
 
    while True:
        quantity = int(input())
        str_ = input()
 
        if str_ == 'ОБЕД':
            break
 
        if 'хобот' in str_:
            trunks += quantity
 
        if 'хвост' in str_:
            tails += quantity
 
        if 'ног' in str_:
            legs += quantity
 
        if 'ух' in str_:
            ears = quantity
 
        if 'рот' in str_:
            mouths += quantity
 
        if 'глаз' in str_:
            eyes += quantity
 
    result = min(trunks, tails, (legs // 4), (ears // 2),
                 mouths, (eyes // 2))
 
    if trunks < 1 or tails < 1 or legs < 4 or \
            legs < 4 or mouths < 1 or eyes < 2 or result < 1:
        print('Какие-то слоны нецелые. Пошли обедать.')
 
    else:
        print('Есть слон!')
        print(result)
 
 
solution()
, он не проходит 12 тест.
Тест 12
Ввод
4
рот
4
хобот
4
хвост
5
хвост
16
нога
5
ухо
3
нога
5
ухо
2
рот
4
рот
3
ухо
8
глаз
3
ОБЕД
2
хобот
3
рот

Ожидаемый вывод
Есть слон!
4

Вывод
Есть слон!
1

Скорее всего ошибка логическая, но вот в упор её не вижу
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.12.2021, 22:34
Ответы с готовыми решениями:

Слон
Компьютер ставит шахматную фигуру на доске 8 х 8 - координаты указываются случайным образом, а игрок сообщает координаты слона с...

Шахматный слон
Даны четыре числа целые числа в диапазоне , координаты слона и координаты другой фигуры. Требуется определить, бьет ли слон, стоящий на...

То ли пчела, то ли слон
Напишите класс ПчёлоСлон (BeeElephant), экземпляр которого инициализируется с двумя целыми числами: какая часть относится к пчеле, а какая...

11
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
20.12.2021, 22:51
Опечатка:
Python
20
21
         if 'ух' in str_:
            ears += quantity
2
0 / 0 / 0
Регистрация: 03.06.2020
Сообщений: 40
21.12.2021, 08:44  [ТС]
Спасибо, исправил, но теперь ошибка в тесте 5.
Ввод
5
ухо
4
бивень
4
хвост
5
хобот
5
рот
3
ухо
8
глаз
6
ухо
12
нога
5
нога
5
ОБЕД
Ожидаемый результат
Есть слон!
3
Вывол
Есть слон!
4



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
def solution():
    trunks = tails = legs = ears = mouths = eyes = 0
 
    while True:
        quantity = int(input())
        str_ = input()
 
        if str_ == 'ОБЕД':
            break
 
        if 'хобот' in str_:
            trunks += quantity
 
        if 'хвост' in str_:
            tails += quantity
 
        if 'ног' in str_:
            legs += quantity
 
        if 'ух' in str_:
            ears += quantity
 
        if 'рот' in str_:
            mouths += quantity
 
        if 'глаз' in str_:
            eyes += quantity
 
    result = min(trunks, tails, (legs // 4), (ears // 2),
                 mouths, (eyes // 2))
 
    if trunks < 1 or tails < 1 or legs < 4 or \
            legs < 4 or mouths < 1 or eyes < 2 or result < 1:
        print('Какие-то слоны нецелые. Пошли обедать.')
 
    else:
        print('Есть слон!')
        print(result)
 
 
solution()
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
21.12.2021, 09:50
Лучший ответ Сообщение было отмечено Viikki как решение

Решение

Цитата Сообщение от Viikki Посмотреть сообщение
Если до обеда так ни одного слона и не нашли, пора заканчивать
где в цикле проверка что слон нашелся?

Добавлено через 9 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from math import inf
 
elephant = {'хобот': 1, 'хвост': 1, 'нога': 4,
            'ухо': 2, 'глаз': 2, 'рот': 1}
*a, = iter(input, 'ОБЕД')
d = {}
for k, v in zip(a[1::2], map(int, a[::2])):
    d[k] = d.get(k, 0) + v
    if all(k in d for k in elephant) and \
       all(d[k] >= v for k, v in elephant.items()):
        break
 
count = inf
for k, v in elephant.items():
    if k in d:
        count = min(count, d[k] // v)
    else:
        print('Какие-то слоны нецелые. Пошли обедать.')
        break
else:
    print('Есть слон!')
    print(count)
Добавлено через 3 минуты
закралась ошибка, count на 0 нужно еще проверить.
мне лень уже исправлять.
2
1 / 1 / 0
Регистрация: 14.01.2020
Сообщений: 1
05.04.2023, 17:15
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
str1 = ''
hob, hvo, nog, uh, glas, rot = 0, 0, 0, 0, 0, 0
c = 0
while str1 != "ОБЕД":
    int1 = int(input())
    str1 = input()    
    if str1 == "хобот":
        hob += int1
    elif str1 == "хвост":
        hvo += int1
    elif str1 == "нога":
        nog += int1
    elif str1 == "ухо":
        uh += int1
    elif str1 == "глаз":
        glas += int1
    elif str1 == "рот":
        rot += int1
    if hob > 0 and hvo > 0 and nog >= 4 and uh >= 2 and glas >= 2 and rot >= 1:
        print('Есть слон!')
        while hob > 0 and hvo > 0 and nog >= 4 and uh >= 2 and glas >= 2 and rot >= 1:
            c += 1
            hob -= 1
            hvo -= 1
            nog -= 4
            uh -= 2
            glas -= 2
            rot -= 1
        print(c)
        break    
if c == 0:
    print("Какие-то слоны нецелые. Пошли обедать.")
1
0 / 0 / 0
Регистрация: 15.03.2024
Сообщений: 1
15.03.2024, 14:23
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
def f():
    hobot = hvost = nogi = yxo = rot = glaz = 0
    r = 0
    while True:
        k = int(input())
        s = input()
 
        if s == 'ОБЕД' or r > 0:
            break
        if 'хобот' in s:
            hobot += k
        if 'хвост' in s:
            hvost += k
        if 'ног' in s:
            nogi += k
        if 'ух' in s:
            yxo += k
        if 'рот' in s:
            rot += k
        if 'глаз' in s:
            glaz += k
        while hobot > 0 and hvost > 0 and nogi > 0 and \
                yxo > 0 and rot > 0 and glaz > 0:
            if hobot >= 1 and hvost >= 1 and nogi >= 4 and \
                    yxo >= 2 and rot >= 1 and glaz >= 2:
                r += 1
                hobot -= 1
                hvost -= 1
                nogi -= 4
                yxo -= 2
                rot -= 1
                glaz -= 2
            else:
                break
    if r > 0:
        print('Есть слон!')
        print(r)
    else:
        print('Какие-то слоны нецелые. Пошли обедать.')
 
 
f()
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
16.03.2024, 00:55
Ну или так:
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
from collections import Counter
 
DETAILS_LIST = ['хобот', 'хвост', 'рот', 'ухо', 'глаз', 'нога']
def get_slon_count(cc):
    if len(cc) == len(DETAILS_LIST):
        min_res = cc[DETAILS_LIST[0]]
        for k, v in cc.items():
            if k in DETAILS_LIST[3:5]:
                v //= 2
            elif k in DETAILS_LIST[5:]:
                v //= 4
            min_res = min(min_res, v)
        if min_res > 0:
            return min_res
 
cc = Counter()
while not (res := get_slon_count(cc)):
    n = int(input('n = '))
    s = input('->')
    if s == 'ОБЕД':
        break
    if s in DETAILS_LIST:
        cc[s] += n
 
if res:
    print('Есть слон!')
    print(res)
else:
    print('Какие-то слоны нецелые. Пошли обедать.')
PavelSergeev, кстати, у вас ошибка. Как только комплект слона набирается, надо выводить результат, обеда не ждать.
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
17.03.2024, 00:10
Чуть подправил:
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
from collections import Counter
from math import inf
 
DETAILS_LIST = ['хобот', 'хвост', 'рот', 'ухо', 'глаз', 'нога']
DETAILS_PER_SLON = dict(zip(DETAILS_LIST, [1, 1, 1, 2, 2, 4]))
 
def get_slon_count(cc):
    min_res = inf
    if len(cc) == len(DETAILS_LIST):
        for k, v in cc.items():
            min_res = min(min_res, v // DETAILS_PER_SLON[k])
        if min_res > 0:
            return min_res
 
cc = Counter()
while not (res := get_slon_count(cc)):
    n = int(input('n = '))
    s = input('->')
    if s == 'ОБЕД':
        break
    if s in DETAILS_LIST:
        cc[s] += n
 
if res:
    print('Есть слон!')
    print(res)
else:
    print('Какие-то слоны нецелые. Пошли обедать.')
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
17.03.2024, 15:59
Еще вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from collections import Counter
 
DETAILS_PER_SLON = {'хобот': 1, 'хвост': 1, 'рот': 1, 'ухо': 2, 'глаз': 2, 'нога': 4}
cc = Counter()
res = 0
while True:
    n = int(input('n = '))
    s = input('->')
    if s == 'ОБЕД':
        print('Какие-то слоны нецелые. Пошли обедать.')
        break
    if s in DETAILS_PER_SLON:
        cc[s] += n / DETAILS_PER_SLON[s]
        if len(cc) == len(DETAILS_PER_SLON):
            res = min(list(cc.values()))
            if res >= 1:
                print('Есть слон!')
                print(int(res))
                break
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
17.03.2024, 23:57
Еще чуть подправил:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from collections import Counter
 
DETAILS_PER_SLON = {'хобот': 1, 'хвост': 1, 'рот': 1, 'ухо': 2, 'глаз': 2, 'нога': 4}
cc = Counter()
while True:
    n = int(input('n = '))
    s = input('->')
    if s == 'ОБЕД':
        print('Какие-то слоны нецелые. Пошли обедать.')
        break
    if s in DETAILS_PER_SLON:
        cc[s] += n / DETAILS_PER_SLON[s]
        if len(cc) == len(DETAILS_PER_SLON) and (res := int(min(list(cc.values())))):
            print('Есть слон!')
            print(res)
            break
0
1 / 1 / 0
Регистрация: 09.05.2022
Сообщений: 5
27.05.2025, 05:03
Добавлено через 3 минуты
Цитата Сообщение от Nikos3712 Посмотреть сообщение
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
str1 = ''
hob, hvo, nog, uh, glas, rot = 0, 0, 0, 0, 0, 0
c = 0
while str1 != "ОБЕД":
    int1 = int(input())
    str1 = input()    
    if str1 == "хобот":
        hob += int1
    elif str1 == "хвост":
        hvo += int1
    elif str1 == "нога":
        nog += int1
    elif str1 == "ухо":
        uh += int1
    elif str1 == "глаз":
        glas += int1
    elif str1 == "рот":
        rot += int1
    if hob > 0 and hvo > 0 and nog >= 4 and uh >= 2 and glas >= 2 and rot >= 1:
        print('Есть слон!')
        while hob > 0 and hvo > 0 and nog >= 4 and uh >= 2 and glas >= 2 and rot >= 1:
            c += 1
            hob -= 1
            hvo -= 1
            nog -= 4
            uh -= 2
            glas -= 2
            rot -= 1
        print(c)
        break    
if c == 0:
    print("Какие-то слоны нецелые. Пошли обедать.")
Спасибо за данный ответ! Все просто и понятно, без дополнительных функций.
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
31.05.2025, 11:31
Можно оптимизировать решение, разделив части тела на две категории:
Части, которых нужно по 1 на слона (рот, хобот, хвост).
Части, которых нужно несколько на слона (нога — 4, ухо — 2, глаз — 2).
Тогда количество слонов определяется как минимум из:

Суммы всех "одинарных" частей (min_one = min(рот, хобот, хвост)).

Количества "множественных" частей, поделённого на необходимое число (ноги // 4, уши // 2, глаза // 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
single_parts = {'рот', 'хобот', 'хвост'}
multiple_parts = {
    'нога': 4,
    'ухо': 2,
    'глаз': 2
}
 
counts = {}
cnt_prt = 0
 
while True:
    line = input().strip()
    if line == "ОБЕД":
        break
    if line.isdigit():
        cnt_prt = int(line)
        continue  # Ждём название части
    part = line.lower()
    counts[part] = counts.get(part, 0) + cnt_prt
    cnt_prt = 0
 
# Проверяем, что все обязательные части есть
min_single = min(counts.get(part, 0) for part in single_parts)
if min_single == 0:
    print(0)
else:
    # Вычисляем ограничения по множественным частям
    min_multiple = min(counts.get(part, 0) // needed for part, needed in multiple_parts.items())
    print(min(min_single, min_multiple))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2025, 11:31
Помогаю со студенческими работами здесь

E. Где слон?
У Михая есть шахматная доска размером 8×8, у которой ряды пронумерованы от 1 до 8 сверху вниз и столбцы пронумерованы от 1 до 8 слева...

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

Пожалуйста добавьте в код фигуры (слон, конь и ферзь) и чтобы они могли ходить
WHITE = 1 BLACK = 2 class Board: def __init__(self): self.color = WHITE self.field = for...

Слон
Реализуйте класс для шахматного слона (Bishop). Интерфейс этого класса должен соответствовать интерфейсу шахматной фигуры, который...

На шахматной доске n на n стоит слон. Сколько у него есть вариантов хода?
На шахматной доске n на n стоит слон. Сколько у него есть вариантов хода? Формат входных данных Вводятся три целых числа n, x и y (1...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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