Nous avons déjà défini ici un numéro de pliage .
Mais maintenant, nous allons définir un Super Folding Number. Un nombre Super Folding est un nombre qui, s'il est plié suffisamment de fois, finira par atteindre un de moins qu'une puissance de deux. La méthode de pliage est légèrement différente de celle de la question du nombre de pliage.
L'algorithme de pliage se déroule comme suit:
Prenez la représentation binaire
par exemple 5882
1011011111010
Je l'ai renversé en trois partitions. Première moitié, dernière moitié et chiffre du milieu (si elle a un nombre impair de chiffres)
101101 1 111010
Si le chiffre du milieu est zéro, ce nombre ne peut pas être plié
Inverser la seconde moitié et superposé à la première moitié
010111 101101
Ajouter les chiffres en place
111212
- S'il y a des 2 dans le résultat, le nombre ne peut pas être plié, sinon le nouveau nombre est le résultat de l'algorithme de pliage.
Un nombre est un nombre Super Folding s'il peut être plié en une chaîne continue de uns. (Tous les numéros pliants sont également des numéros super pliants)
Votre tâche consiste à écrire du code qui prend un nombre et génère une valeur véridique si le nombre est un nombre Super Folding et faux sinon. Vous serez noté sur la taille de votre programme.
Exemples
5200
Convertir en binaire:
1010001010000
Divisé en deux:
101000 1 010000
Le milieu est un donc nous continuons de superposer les moitiés:
000010
101000
Les a ajoutés:
101010
Pas de deux donc nous continuons de diviser en deux:
101 010
Plier:
010
101
111
Le résultat est 111
(7 en décimal), il s'agit donc d'un Super Folding Number.
Cas de test
Les 100 premiers numéros super pliants sont:
[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
glissée à nouveau dans les cas de test? Je ne vois pas comment il peut être plié, car il se divise en1 1
donnant immédiatement un2
. Ou dites-vous que le plier zéro fois compte aussi?