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

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

01.03.2018, 22:35. Показов 14470. Ответов 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 / 2082 / 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 / 2082 / 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 / 2082 / 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru