Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

숫자의 순열이 3으로 나눌 수 있고 Python에서 회문인지 확인

<시간/>

큰 양의 정수 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
  • 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