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

Python에서 큰 수의 순열이 8로 나누어 떨어지는지 확인하십시오.

<시간/>

큰 숫자가 제공되고 해당 숫자의 자릿수가 8로 나누어 떨어지는 순열이 있는지 확인해야 한다고 가정합니다. 숫자는 문자열 형식으로 제공됩니다.

따라서 입력이 input_num =4696984와 같으면 출력은 "8로 나눌 수 있음"이 됩니다.

이 문제를 해결하기 위해 숫자의 자릿수로 가능한 모든 세 자리 순열을 확인하고 숫자의 모든 자릿수 순열에서 발생할 수 있는지 확인합니다. 8로 나눌 수 있는 세 자리 순열이 숫자의 모든 자리 순열 끝에 발생하면 순열을 8로 나눌 수 있다고 말합니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • input_num의 길이가 <3이면
    • input_num mod 8이 0과 같으면
      • 참 반환
    • input_num :=input_num의 반대
    • input_num mod 8이 0과 같으면
      • 참 반환
    • 거짓을 반환
  • temp_arr :=0으로 초기화된 크기 10의 새 목록입니다.
  • 0~input_num 크기 범위의 개수에 대해
  • temp_arr[input_num[count] - 0] :=temp_arr[input_num[count] - 0] + 1
  • 104 ~ 999 범위의 카운트의 경우 8만큼 증가, do
    • temp :=count
    • occurences :=0으로 초기화된 크기 10의 새 목록입니다.
    • 발생 횟수[temp mod 10] :=발생 횟수[temp mod 10] + 1
    • temp :=온도 / 10
    • 발생 횟수[temp mod 10] :=발생 횟수[temp mod 10] + 1
    • temp :=온도 / 10
    • 발생 횟수[temp mod 10] :=발생 횟수[temp mod 10] + 1
    • temp :=count
    • 발생[temp mod 10]> temp_arr[temp mod 10]이면
      • 다음 반복으로 이동
    • temp :=온도 / 10
    • 발생[temp mod 10]> temp_arr[temp mod 10]이면
      • 다음 반복으로 이동
    • temp :=온도 / 10
    • 발생[temp mod 10]> temp_arr[temp mod 10]이면
      • 다음 반복으로 이동
    • 참 반환
  • 거짓을 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

def solve(input_num):
   if len(input_num) < 3:
      if int(input_num) % 8 == 0:
         return True
      input_num = input_num[::-1]
      if int(input_num) % 8 == 0:
         return True
      return False
   temp_arr = 10 * [0]
   for count in range(0, len(input_num)):
      temp_arr[int(input_num[count]) - 0] += 1
   for count in range(104, 1000, 8):
      temp = count
      occurences = 10 * [0]
      occurences[int(temp % 10)] += 1
      temp = temp / 10
      occurences[int(temp % 10)] += 1
      temp = temp / 10
      occurences[int(temp % 10)] += 1
      temp = count
      if (occurences[int(temp % 10)] >
         temp_arr[int(temp % 10)]):
         continue
      temp = temp / 10
      if (occurences[int(temp % 10)] >
         temp_arr[int(temp % 10)]):
         continue
      temp = temp / 10
      if (occurences[int(temp % 10)] >
         temp_arr[int(temp % 10)]):
         continue
         return True
      return False
if solve("4696984"):
   print("Divisible by eight")
else:
   print("Not divisible by eight")

입력

4696984

출력

Divisible by eight