Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 26, 2011 18:22:10

AlexDos
От:
Зарегистрирован: 2011-10-05
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Снова задачки

Задача «Забавная игра»
Легендарный учитель математики Юрий Петрович придумал забавную игру с числами. А именно, взяв произвольное целое число, он переводит его в двоичную систему счисления, получая некоторую последовательность из нулей и единиц, начинающуюся с единицы. (Например, десятичное число 1910 = 1∙24+0∙23+0∙22+1∙21+1∙20 в двоичной системе запишется как 100112.) Затем учитель начинает сдвигать цифры полученного двоичного числа по циклу (так, что последняя цифра становится первой, а все остальные сдвигаются на одну позицию вправо), выписывая образующиеся при этом последовательности из нулей и единиц в столбик — он подметил, что независимо от выбора исходного числа получающиеся последовательности начинают с некоторого момента повторяться. И, наконец, Юрий Петрович отыскивает максимальное из выписанных чисел и переводит его обратно в десятичную систему счисления, считая это число результатом проделанных манипуляций. Так, для числа 19 список последовательностей будет таким:
10011
11001
11100
01110
00111
10011

и результатом игры, следовательно, окажется число 1∙24+1∙23+1∙22+0∙21+0∙20 = 28.

Поскольку придуманная игра с числами все больше занимает воображение учителя, отвлекая тем самым его от работы с ну очень одаренными школьниками, Вас просят написать программу, которая бы помогла Юрию Петровичу получать результат игры без утомительных ручных вычислений.
Формат ввода
Входной файл содержит одно целое число N (0 ≤ N ≤ 32767).
Формат вывода
Ваша программа должна вывести в выходной файл одно целое число, равное результату игры.
Пример
Пример ввода
19
Пример вывода
28



Офлайн

#2 Окт. 28, 2011 19:13:31

Actor
От:
Зарегистрирован: 2010-10-10
Сообщения: 39
Репутация: +  0  -
Профиль  

Снова задачки

import sys

def dectobin(dec):
bin = ""
if dec < 0: raise ValueError, "must be a positive integer"
if dec == 0: return '0'
while dec > 0:
bin = str(dec % 2) + bin
dec = dec >> 1
return bin

def bintodec(bin):
dec = 0
for i in xrange(len(bin)):
dec = dec + int(bin[i]) * (2**(len(bin) - 1 - i))
return dec

def cycle(bin):
return bin[-1] + bin[:-1]

def main():
dec = int(sys.argv[1])
max = dec
for i in xrange(len(dectobin(dec)) - 1):
dec = bintodec(cycle(dectobin(dec)))
if dec > max: max = dec
return max

if __name__ == '__main__':
print main(),



Отредактировано (Окт. 28, 2011 23:23:58)

Офлайн

#3 Окт. 29, 2011 10:27:28

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Снова задачки

from math import log
v = 19 # число для проверки, которое берем из файла
m = max( v>>k|(v&2**k-1)<<5-k for k in range( int(log(v,2))+1 ) )
print( "Максимально число для", v, "=", m )
print( "Привет Юрию Петровичу!" )



Отредактировано (Окт. 30, 2011 14:52:04)

Офлайн

#4 Дек. 12, 2011 14:56:37

baa
От:
Зарегистрирован: 2011-11-25
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Снова задачки

n = list(bin(int(open('input.txt').readline())))
N = [n[:]]
for i in xrange(len(n) - 3):
n.insert(2, n.pop())
N.append(n[:])
n = eval(reduce(lambda x, y: x + y, max(N)))
open('output.txt', 'w').write(str(n))



Отредактировано (Янв. 13, 2012 05:02:48)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version