Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2017 10:20:09

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

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

py.user.next
Это обычный бинарный поиск (в основе лежит принцип дихотомии). Максимальное количество шагов равно log2(1000) ~= 9.96
совершенно верно
а для точности нахождения из множества 0…N начальное число должно быть
 >>> import math
>>> N=1000
>>> 1 << math.floor(math.log2(N))
512
>>> 
иначе будут ошибки

Отредактировано vic57 (Окт. 28, 2017 11:55:20)

Офлайн

#2 Окт. 28, 2017 13:02:31

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

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

> да ну?

Ты мне сейчас хочешь рассказать что он 488 не найдёт?

 rodegast@rodegast:~$ python3 ./game.py
500
<
250
>
375
>
437
>
468
>
483
>
490
<
487
>
488



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

Офлайн

#3 Окт. 28, 2017 14:14:09

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

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

Rodegast
Ты мне сейчас хочешь рассказать что он 488 не найдёт?
и не только
 def f(delta,val):
    summ = 0
    while delta:
        if summ < val: summ += delta
        elif summ > val: summ -= delta
        delta >>= 1
    return summ
d = 1000
out = {}
for i in range(440,450):
    s = f(d,i)
    if s != i: print('error',s,i)
 error 442 440
error 442 441
error 444 445
error 448 447
>>> 

Офлайн

#4 Окт. 28, 2017 14:18:04

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

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

> и не только

Тогда почему оно у меня все эти числа находит? Я наверное что-то нетак делаю…



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

Отредактировано Rodegast (Окт. 28, 2017 14:28:46)

Офлайн

#5 Окт. 28, 2017 14:44:23

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

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

Rodegast
Я наверное что-то нетак делаю…
код покажи

Офлайн

#6 Окт. 28, 2017 14:47:47

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

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

http://python.su/forum/topic/33906/?page=1#post-185432



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

Офлайн

#7 Окт. 28, 2017 14:48:14

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

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

vic57
а для точности нахождения из множества 0…N начальное число должно быть

512
По условию границы равны 1 и 1000 включительно.
Медиана множества будет равна (1 + 1000) / 2 = 500.5.



Отредактировано py.user.next (Окт. 28, 2017 14:49:40)

Офлайн

#8 Окт. 28, 2017 15:25:26

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

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

py.user.next
По условию границы равны 1 и 1000 включительно.
Медиана множества будет равна (1 + 1000) / 2 = 500.5.
по такому условию ряд в целых числах не сойдется, это элементарная двоичная арифметика

Офлайн

#9 Окт. 28, 2017 15:30:41

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

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

Rodegast
if S > 1: S //= 2
это костыль - количество шагов у тебя может быть больше 10

Офлайн

#10 Окт. 28, 2017 15:55:19

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

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

vic57
по такому условию ряд в целых числах не сойдется
От медианы можно взять любое из соседних целых чисел (они равноудалены от неё).



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version