Já definimos um número dobrável aqui .
Mas agora vamos definir um número super dobrável. Um número Super Folding é um número que, se dobrado o suficiente, chegará a um a menos que a potência de dois. O método de dobrar é um pouco diferente do que na questão do número de dobras.
O algoritmo de dobragem é o seguinte:
Pegue a representação binária
por exemplo, 5882
1011011111010
Derramado em três partições. Primeira metade, última metade e dígito do meio (se tiver um número ímpar de dígitos)
101101 1 111010
Se o dígito do meio for zero, esse número não poderá ser dobrado
Inverta a segunda metade e sobreponha na primeira metade
010111 101101
Adicione os dígitos no lugar
111212
- Se houver 2s no resultado, o número não pode ser dobrado, caso contrário, o novo número é o resultado do algoritmo de dobragem.
Um número é um número super dobrável, se puder ser dobrado em uma sequência contínua de unidades. (Todos os números dobráveis também são números super dobráveis)
Sua tarefa é escrever o código que recebe um número e gera um valor verdadeiro se o número for um número Super Folding e, caso contrário, falsificará. Você será pontuado no tamanho do seu programa.
Exemplos
5200
Converter em binário:
1010001010000
Dividido ao meio:
101000 1 010000
O meio é um, então continuamos Sobreponha as metades:
000010
101000
Adicionados:
101010
Não há dois, então continuamos Divididos ao meio:
101 010
Dobra:
010
101
111
O resultado é 111
(7 em decimal), portanto, este é um número super dobrável.
Casos de teste
Os primeiros 100 números super dobráveis são:
[1, 2, 3, 6, 7, 8, 10, 12, 15, 20, 22, 28, 31, 34, 38, 42, 48, 52, 56, 63, 74, 78, 90, 104, 108, 120, 127, 128, 130, 132, 142, 150, 160, 170, 178, 192, 204, 212, 232, 240, 255, 272, 274, 276, 286, 310, 336, 346, 370, 400, 412, 436, 472, 496, 511, 516, 518, 524, 542, 558, 580, 598, 614, 640, 642, 648, 666, 682, 704, 722, 738, 772, 796, 812, 852, 868, 896, 920, 936, 976, 992, 1023, 1060, 1062, 1068, 1086, 1134, 1188, 1206, 1254, 1312, 1314, 1320, 1338, 1386, 1440, 1458, 1506, 1572, 1596]
3
infiltrou nos casos de teste novamente? Não consigo ver como ela pode ser dobrada, pois se divide em1 1
, dando imediatamente um2
. Ou você está dizendo que dobrá-lo zero vezes também conta?