여기에 접는 숫자를 이미 정의했습니다 .
그러나 이제 우리는 슈퍼 폴딩 번호를 정의 할 것입니다. 수퍼 폴딩 수는 접을 수있는 횟수가 2의 제곱보다 적은 1에 도달하는 숫자입니다. 접는 방법은 접는 숫자 질문과 약간 다릅니다.
폴딩 알고리즘은 다음과 같습니다.
이진 표현을
예 : 5882
1011011111010
그것을 3 개의 칸막이에 쏟았습니다. 전반, 마지막 반 및 중간 자릿수 (홀수의 자릿수가있는 경우)
101101 1 111010
중간 자릿수가 0이면이 숫자를 접을 수 없습니다
후반전 반전 후반전 중첩
010111 101101
자리를 추가하십시오
111212
- 결과에 2가 있으면 숫자를 접을 수 없으며, 그렇지 않으면 새 숫자는 접는 알고리즘의 결과입니다.
연속 된 문자열로 접을 수있는 경우 숫자는 슈퍼 접기 숫자입니다. (모든 접는 숫자는 슈퍼 접는 숫자이기도합니다)
당신의 작업은 숫자를 사용하고 숫자가 슈퍼 폴딩 숫자이면 거짓 값을 출력하고 그렇지 않으면 거짓 값을 출력하는 코드를 작성하는 것입니다. 프로그램 규모에 따라 점수가 매겨집니다.
예
5200
이진으로 변환 :
1010001010000
반으로 나누기 :
101000 1 010000
중간은 하나이므로 우리는 절반을 중첩합니다.
000010
101000
그들을 추가했습니다 :
101010
둘이 없으므로 우리는 계속 반으로 나눕니다.
101 010
겹:
010
101
111
결과는 111
(십진수 7)이므로 이것은 슈퍼 폴딩 숫자입니다.
테스트 사례
처음 100 개의 슈퍼 폴딩 번호는 다음과 같습니다.
[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
다시 테스트 사례에 몰래 들어갔습니까? 이에 분할 이후는, 그것은 접을 수있는 방법을 볼 수 없습니다1 1
즉시를 제공2
. 아니면 0으로 접는 것도 중요하다고 말하고 있습니까?