Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem có hoán vị nào của một số lớn chia hết cho 8 trong Python hay không

Giả sử, chúng ta được cung cấp một số khổng lồ và chúng ta phải tìm xem có hoán vị nào giữa các chữ số của số đó chia hết cho 8. Số được cung cấp cho chúng ta ở định dạng chuỗi hay không.

Vì vậy, nếu đầu vào là:input_num =4696984, thì đầu ra sẽ là "Chia hết cho tám".

Để giải quyết vấn đề này, chúng ta sẽ kiểm tra tất cả các hoán vị có ba chữ số có thể có với các chữ số của số đó và xem liệu chúng có thể xảy ra trong bất kỳ hoán vị có tất cả các chữ số nào của số đó hay không. Nếu một hoán vị có ba chữ số chia hết cho tám xảy ra ở cuối một hoán vị có tất cả các chữ số của một số, chúng ta sẽ nói rằng hoán vị đó chia hết cho 8.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu độ dài của input_num <3, thì
    • nếu input_num mod 8 giống 0, thì
      • trả về True
    • input_num:=đảo ngược của input_num
    • nếu input_num mod 8 giống 0, thì
      • trả về True
    • trả về Sai
  • temp_arr:=một danh sách mới có kích thước 10 được khởi tạo bằng 0.
  • để đếm trong phạm vi 0 đến kích thước của input_num, hãy thực hiện
  • temp_arr [input_num [count] - 0]:=temp_arr [input_num [count] - 0] + 1
  • đối với số đếm trong phạm vi 104 đến 999, tăng 8, thực hiện
    • temp:=count
    • Occurences:=một danh sách mới có kích thước 10 được khởi tạo bằng 0.
    • Occurences [temp mod 10]:=Occurences [temp mod 10] + 1
    • temp:=temp / 10
    • Occurences [temp mod 10]:=Occurences [temp mod 10] + 1
    • temp:=temp / 10
    • Occurences [temp mod 10]:=Occurences [temp mod 10] + 1
    • temp:=count
    • if enterurences [temp mod 10]> temp_arr [temp mod 10], thì
      • chuyển sang lần lặp tiếp theo
    • temp:=temp / 10
    • if enterurences [temp mod 10]> temp_arr [temp mod 10], thì
      • chuyển sang lần lặp tiếp theo
    • temp:=temp / 10
    • if enterurences [temp mod 10]> temp_arr [temp mod 10], thì
      • chuyển sang lần lặp tiếp theo
    • trả về True
  • trả về Sai

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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")

Đầu vào

4696984

Đầu ra

Divisible by eight