큰 양의 정수 N이 제공된다고 가정합니다. 숫자 순열에서 숫자를 찾을 수 있는지 확인해야 합니다. 순열은 역 형태, 즉 회문과 같으며 3으로도 나눌 수 있습니다.
예를 들어, 숫자 132213이 있다고 가정합니다. 숫자의 자릿수에서 순열을 확인하면 123321을 얻습니다. 이것은 회문이며 3으로도 나눌 수 있습니다. 입력된 숫자에서 가능한 순열이 있는지 확인해야 합니다. 위의 조건을 만족합니다.
따라서 입력이 input_num =132213과 같으면 출력은 "하나 이상의 순열은 회문이며 3으로 나눌 수 있음"이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- digit_array :=0으로 초기화된 크기 10의 새 목록
- input_sum :=0
- input_num이 0이 아닌 동안 do
- input_sum :=input_sum + (input_num 모드 10)
- digit_array[input_num mod 10] :=digit_array[input_num mod 10] + 1
- input_num :=(input_num / 10)의 하한값
- input_sum mod 3이 0과 같지 않으면
- 거짓을 반환
- index_odd :=0
- 0에서 9 사이의 i에 대해
- digit_array[i] mod 2가 0과 같지 않으면
- 인덱스 홀수 :=인덱스 홀수 + 1
- digit_array[i] mod 2가 0과 같지 않으면
- index_odd> 1이면
- return "순열은 회문이며 3으로 나눌 수 없습니다."
- 그렇지 않으면
- return "하나 이상의 순열은 회문이며 3으로 나눌 수 있습니다."
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
def solve(input_num): digit_array = [0] * 10 input_sum = 0 while (input_num) : input_sum += input_num % 10 digit_array[input_num % 10] += 1 input_num //= 10 if (input_sum % 3 != 0): return False index_odd = 0 for i in range(10) : if (digit_array[i] % 2 != 0): index_odd += 1 if (index_odd > 1): return "No permutation is a palindrome and is divisible by three" else: return "One or more permutation is a palindrome and is divisible by three" input_num = 132213 print(solve(input_num))
입력
132213
출력
One or more permutation is a palindrome and is divisible by three