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
- nếu input_num mod 8 giống 0, thì
- 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