Abbiamo già definito un numero pieghevole qui .
Ma ora definiremo un numero super pieghevole. Un numero Super Folding è un numero che se piegato abbastanza volte alla fine raggiungerà uno in meno di una potenza di due. Il metodo di piegatura è leggermente diverso rispetto alla domanda sul numero di piegatura.
L'algoritmo pieghevole è il seguente:
Prendi la rappresentazione binaria
ad es. 5882
1011011111010
Distribuito in tre partizioni. Prima metà, ultima metà e cifra centrale (se ha un numero dispari di cifre)
101101 1 111010
Se la cifra centrale è zero, questo numero non può essere piegato
Invertire la seconda metà e sovrapporre la prima metà
010111 101101
Aggiungi le cifre sul posto
111212
- Se nel risultato ci sono 2 secondi, il numero non può essere piegato altrimenti il nuovo numero è il risultato dell'algoritmo di piegatura.
Un numero è un numero Super Folding se può essere piegato in una stringa continua di quelli. (Tutti i numeri pieghevoli sono anche numeri super pieghevoli)
Il tuo compito è di scrivere un codice che accetta un numero e genera un valore di verità se il numero è un numero Super Folding e falsa in caso contrario. Sarai segnato sulla dimensione del tuo programma.
Esempi
5200
Converti in binario:
1010001010000
Dividi a metà:
101000 1 010000
Il mezzo è uno quindi continuiamo a sovrapporre le metà:
000010
101000
Li ho aggiunti:
101010
No due quindi continuiamo a dividere a metà:
101 010
Fold:
010
101
111
Il risultato è 111
(7 in decimale) quindi questo è un numero super pieghevole.
Casi test
I primi 100 numeri super pieghevoli sono:
[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
insinuato di nuovo nei casi di test? Non riesco a vedere come può essere piegato, dal momento che si divide1 1
, dando immediatamente un2
. O stai dicendo che ripiegarlo zero volte conta anche?