Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/75: Рейтинг темы: голосов - 75, средняя оценка - 4.71
97 / 20 / 13
Регистрация: 27.02.2018
Сообщений: 60

Алгоритм Задачи Угадай число

01.03.2018, 22:35. Показов 14561. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил задачу методом подгона , но выдает RunTimeError .Уже пол дня не могу понять что от меня хотят в этой задаче, и как я могу узнать что в введенной строчке содержится число которое загадали.Кто знает подскажите. Хочется понять.

Август и Беатриса играют в игру. Август загадал натуральное число от 1 до n. Беатриса пытается угадать это число, для этого она называет некоторые множества натуральных чисел. Август отвечает Беатрисе YES, если среди названных ей чисел есть задуманное или NO в противном случае. После нескольких заданных вопросов Беатриса запуталась в том, какие вопросы она задавала и какие ответы получила и просит вас помочь ей определить, какие числа мог задумать Август.

Формат ввода

Первая строка входных данных содержит число n — наибольшее число, которое мог загадать Август. Далее идут строки, содержащие вопросы Беатрисы. Каждая строка представляет собой набор чисел, разделенных пробелами. После каждой строки с вопросом идет ответ Августа: YES или NO. Наконец, последняя строка входных данных содержит одно слово HELP.

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

Вы должны вывести (через пробел, в порядке возрастания) все числа, которые мог задумать Август.

Тест 1
Входные данные:
10
1 2 3 4 5
YES
2 4 6 8 10
NO
HELP

Вывод программы:
1 3 5


Тест 2
Входные данные:
10
1 2 3 4 5 6 7 8 9 10
YES
1
NO
2
NO
3
NO
4
NO
6
NO
7
NO
8
NO
9
NO
10
NO
HELP


Вывод программы:
5
Python
1
2
3
4
5
6
7
8
9
10
11
12
n = int(input())
a = set(map(int, input().split()))
print("YES")
an = 0
b = set()
while an != {"HELP"}:
    an = set(input().split())
    if an != {"HELP"}:
        b = b | an
        print("NO")
b = set(map(int, b))
print(*sorted(a - b))
Подогнал код под ответы,но не то
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2018, 22:35
Ответы с готовыми решениями:

Продолжение задачи "Угадай число"
Цель: написать программу, решающую задачу "Угадай число". Суть: хочу научится работать с циклами. Условия: загадывается число от 1...

Игра «Угадай число». Программа задает псевдослучайное число из заданного диапазона
Игра «Угадай число». Программа задает псевдослучайное число из заданного диапазона. Диапазон и количество попыток пользователь вводит с ...

Реализовать игру «Угадай число», где в качестве игрока, угадывающего число, выступает компьютер
Игра «Угадай число» Реализовать игру «Угадай число», где в качестве игрока, угадывающего число, выступает компьютер. Дополнительная...

12
76 / 50 / 26
Регистрация: 22.02.2015
Сообщений: 306
01.03.2018, 22:52
Цитата Сообщение от Zarelix Посмотреть сообщение
но не то
Разберитесь с set'ами и задача покажется легкой. А так это уже был Угадай число - Python
1
97 / 20 / 13
Регистрация: 27.02.2018
Сообщений: 60
02.03.2018, 02:28  [ТС]
С сетами вроде разобрался(ВРОДЕ). Не пойму откуда при вводе первого множества программа знает что ответить нужно Yes. Если бы можно было импортировать рендом в диапазоне с 1 до Н, а потом проверить входит ли это число в множество ,то я бы понял.Но в курсе рендом не давали еще, да и операции с множествами обьяснили на самых простых примерах .И вот этот кусок я не пойму
Тест 1
Входные данные:
10
1 2 3 4 5
YES
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
02.03.2018, 04:26
Почитайте условие задачи ещё раз и внимательно.
Ваша программа вообще не должна отвечать "YES" или "NO".
Эти слова - часть входных данных.
1
97 / 20 / 13
Регистрация: 27.02.2018
Сообщений: 60
02.03.2018, 17:33  [ТС]
При помощи советов решил таким способом(тот ещё *овнокод).Вроде все условия выполнил,но задача не проходит ,пишет Test 9 Time Limit Exceeded
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
n = int(input())
a = set(map(int, input().split()))
all_set = set()
for i in range(1, n + 1):
    all_set.add(i)
if all_set >= a:
    ans = input()
    b = set()
    if ans == "NO":
        a = all_set - a
 
    while ans != "HELP":
        c = set(input().split())
        if c != {'HELP'}:
            ans = input()
            if ans == "NO":
                b = b | c
            elif ans == "YES":
                c = set(map(int, c))
                a = a.intersection(c)
        else:
            break
    a = set(map(int, a))
    b = set(map(int, b))
    print(*sorted(a.difference(b)))
0
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
02.03.2018, 18:08
Лучший ответ Сообщение было отмечено Zarelix как решение

Решение

Возможно изменение множества на месте ускорит выполнение:
Python
1
2
3
4
5
6
7
8
9
10
11
12
n = int(input())
result = set(map(str, range(1, n+1)))
while True:
    s = input()
    if s == 'HELP':
        break
    inp = set(s.split())
    if input() == 'YES':
        result.intersection_update(inp)
    else:
        result.difference_update(inp)
print(' '.join(result))
1
76 / 50 / 26
Регистрация: 22.02.2015
Сообщений: 306
02.03.2018, 18:17
Цитата Сообщение от Zarelix Посмотреть сообщение
пишет Test 9 Time Limit Exceeded
Скорее всего бесконечно входные данные ждет.

Вот вариант от разработчиков задачи.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
n = int(input())
all_nums = set(range(1, n + 1))
possible_nums = all_nums
while True:
    guess = input()
    if guess == 'HELP':
        break
    guess = {int(x) for x in guess.split()}
    answer = input()
    if answer == 'YES':
        possible_nums &= guess
    else:
        possible_nums &= all_nums - guess
 
print(' '.join([str(x) for x in sorted(possible_nums)]))
1
97 / 20 / 13
Регистрация: 27.02.2018
Сообщений: 60
02.03.2018, 19:54  [ТС]
Результат от разработчиков не проходит проверку. Test 9
Time Limit Exceeded
0
76 / 50 / 26
Регистрация: 22.02.2015
Сообщений: 306
02.03.2018, 20:35
Цитата Сообщение от Zarelix Посмотреть сообщение
Результат от разработчиков не проходит проверку.
ТУТ прекрасно проходит
1
97 / 20 / 13
Регистрация: 27.02.2018
Сообщений: 60
02.03.2018, 21:24  [ТС]
Цитата Сообщение от DUMP Посмотреть сообщение
ТУТ прекрасно проходит
Я на курсере прохожу,тут не проходит.(Не пойму что им нужно

Добавлено через 21 минуту
Цитата Сообщение от orAnd Посмотреть сообщение
Возможно изменение множества на месте ускорит выполнение:
Вы правы оказались правы.Всем спасибо
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
03.03.2018, 05:07
А какая сила мешает в 13 строке написать сразу
Python
1
        possible_nums -= guess
?

Или я чего-то не понимаю?
0
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
03.03.2018, 10:18
Цитата Сообщение от Black Fregat Посмотреть сообщение
А какая сила мешает в 13 строке написать сразу
Я примерно так и написал, а какая сила мешает разработчикам, не знаю.

В 15 строке можно заменить списковое включение генераторным выражением:
Python
1
print(' '.join((str(x) for x in sorted(possible_nums))))
Теоретически получается быстрее без построения временного списка.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
03.03.2018, 14:17
Я обычно пишу что-то вроде
Python
1
     print(*sorted(possible_nums))
По-моему, print сам всё сделает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2018, 14:17
Помогаю со студенческими работами здесь

Угадай число
Август и Беатриса играют в игру. Август загадал натуральное число от 1 до n. Беатриса пытается угадать это число, для этого она называет...

Угадай число
Составьте программу «Угадай число», но обратный вариант: пусть число загадал человек, а компьютер должен его отгадать за минимальное число...

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

Угадай число
Здравствуйте. Подскажите, пожалуйста, как можно оптимизировать мою программу по скорости ее выполнения: n=int(input()) ...

Угадай число
Здравствуйте, не могу определиться с ошибкой. Условие Август и Беатриса играют в игру. Август загадал натуральное число от 1 до n....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru