Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 27, 2017 21:02:30

ann_beggin
Зарегистрирован: 2017-10-27
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачей. Угадайка чисел от 1 до 1000

Пользователь загадывает целое число от 1 до 1000, но не вводит его. Программа должна максимум за 10 шагов определить это число и вывести на экран. Программа выводит свои догадки на экран, и пользователь отвечает >,< или = это число загаданному

 answer=''
number=int(500)
print(number)
while answer!='=':
    answer=input()
    if answer=='=':
        print (int(number))
    elif answer=='>':
        number*=1.5
        print (int(number))
    elif answer=='<':
        number*=0.5
        if number>1000:
            number=1000
        print (int(number))
Помогите пожалуйста

Отредактировано ann_beggin (Окт. 27, 2017 21:05:47)

Офлайн

#2 Окт. 27, 2017 21:24:15

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Помогите с задачей. Угадайка чисел от 1 до 1000

 import random
n = 0
number_1 = 1
number_2 = 1000
while n < 10:
    n += 1
    number = random.randint(number_1, number_2)
    print(number)
    answer = input('Enter result')
    if answer == '>':
        number_1 = number + 1
    elif answer == '<':
        number_2 = number - 1
    else:
        print('WIN!')
        break
else:
    print('Game Over')

Офлайн

#3 Окт. 27, 2017 21:47:29

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Помогите с задачей. Угадайка чисел от 1 до 1000

задачка на метод последовательных приближений

 summ = 0
delta = 2**9
while True:
    print('sum:',summ)
    inp = input('?: ')
    if inp == '=':
        print('result:',summ)
        break
    elif inp == '<':
            summ += delta
            delta >>= 1
    elif inp == '>':
            summ -= delta
            delta >>= 1
    else:
        print('input error')

Офлайн

#4 Окт. 27, 2017 21:57:51

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2842
Репутация: +  186  -
Профиль   Отправить e-mail  

Помогите с задачей. Угадайка чисел от 1 до 1000

Нет это задача на динамическое программирование.

 S = 250
Median = 500
while True:
	print(Median)
	if input() == ">":
		Median += S
	else:
		Median -= S
	if S > 1: S //= 2



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Окт. 28, 2017 02:19:22)

Офлайн

#5 Окт. 27, 2017 22:11:36

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Помогите с задачей. Угадайка чисел от 1 до 1000

Rodegast
S = 250
Median = 500
while True:
print(Median)
if input() == “>”:
Median += S
else:
Median -= S
S -= S // 2
не сойдется - д.б 2 в степени

Офлайн

#6 Окт. 27, 2017 22:14:17

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2842
Репутация: +  186  -
Профиль   Отправить e-mail  

Помогите с задачей. Угадайка чисел от 1 до 1000

А ты проверь



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Окт. 27, 2017 22:23:21

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Помогите с задачей. Угадайка чисел от 1 до 1000

Rodegast
А ты проверь
проверяй сам, я это на ассемблере делал

Офлайн

#8 Окт. 28, 2017 02:06:00

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2842
Репутация: +  186  -
Профиль   Отправить e-mail  

Помогите с задачей. Угадайка чисел от 1 до 1000

У меня всё проверенно. Вот пример того как он находит нужное число

 rodegast@rodegast:~$ python3 ./game.py
500
>
750
<
625
>
687
<
656
>
671
<
664
>
667
<
666



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Окт. 28, 2017 02:26:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите с задачей. Угадайка чисел от 1 до 1000

vic57
задачка на метод последовательных приближений
Rodegast
Нет это задача на динамическое программирование.
Это обычный бинарный поиск (в основе лежит принцип дихотомии). Максимальное количество шагов равно log2(1000) ~= 9.96
Делим упорядоченное множество на две части и отбрасываем часть, в которой ответа точно нет. С оставшейся частью повторяем всё то же самое, пока не останется один элемент множества.



Офлайн

#10 Окт. 28, 2017 09:44:12

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Помогите с задачей. Угадайка чисел от 1 до 1000

Rodegast
У меня всё проверенно. Вот пример того как он находит нужное число
 >>> def f(delta,val):
    summ = 0
    while delta:
        if summ < val: summ += delta
        elif summ > val: summ -= delta
        else: break
        delta >>= 1
    return summ
>>> d = 1000
>>> count = 0
>>> for i in range(0,1000):
    if i != f(d, i): count += 1
>>> count
488
>>> 
да ну?
для особо продвинннутых

Отредактировано vic57 (Окт. 28, 2017 10:03:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version