Giả sử, chúng ta được cung cấp một số nguyên dương lớn N. Chúng ta phải kiểm tra xem chúng ta có thể tìm ra một số từ các hoán vị chữ số của nó hay không; sao cho hoán vị bằng dạng đảo ngược của nó, tức là palindrome của nó, và cũng chia hết cho 3.
Ví dụ, giả sử chúng ta có số 132213. Nếu chúng ta kiểm tra hoán vị từ các chữ số của số, chúng ta nhận được 123321 là một palindrome và cũng chia hết cho 3. Chúng ta phải kiểm tra xem có hoán vị nào từ số đầu vào không thỏa mãn các điều kiện trên.
Vì vậy, nếu đầu vào là:input_num =132213, thì đầu ra sẽ là "Một hoặc nhiều hoán vị là một palindrome và chia hết cho ba".
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- digit_array:=một danh sách mới có kích thước 10 được khởi tạo bằng các chữ số 0
- input_sum:=0
- trong khi input_num không phải là 0, hãy thực hiện
- input_sum:=input_sum + (input_num mod 10)
- digit_array [input_num mod 10]:=digit_array [input_num mod 10] + 1
- input_num:=giá trị sàn của (input_num / 10)
- nếu input_sum mod 3 không giống 0, thì
- trả về Sai
- index_odd:=0
- đối với tôi trong phạm vi từ 0 đến 9, hãy thực hiện
- nếu digit_array [i] mod 2 không giống 0, thì
- index_odd:=index_odd + 1
- nếu digit_array [i] mod 2 không giống 0, thì
- nếu index_odd> 1, thì
- return "Không hoán vị là một palindrome và chia hết cho ba"
- nếu không,
- return "Một hoặc nhiều hoán vị là một palindrome và chia hết cho ba"
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): 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))
Đầu vào
132213
Đầu ra
One or more permutation is a palindrome and is divisible by three