Giả sử chúng ta có một số n, cần kiểm tra xem tất cả các số con (sub-numbers) của số này có tích chữ số duy nhất hay không. Một số n chữ số có n*(n+1)/2 số con. Ví dụ, các số con của 135 là 1, 3, 5, 13, 35, 135. Tích chữ số của một số là tích của các chữ số của nó.
Ví dụ, nếu đầu vào là n = 235, thì đầu ra sẽ là True vì các số con là [2, 3, 5, 23, 35, 235], tích chữ số tương ứng là [2, 3, 5, 6, 15, 30] - tất cả đều khác nhau.
Các bước giải quyết:
- Định nghĩa hàm dig_prod(digits): tính tích các chữ số.
- Chuyển số thành chuỗi num_str, length := độ dài.
- digits := mảng các chữ số nguyên.
- prod_set := tập hợp rỗng lưu các tích chữ số.
- Duyệt i từ 0 đến length - 1:
- Duyệt j từ i đến length - 1:
- item := dig_prod(digits[i:j+1]).
- Nếu item đã có trong prod_set, trả về False.
- Ngược lại, thêm item vào prod_set.
- Duyệt j từ i đến length - 1:
- Trả về True.
Xem ví dụ dưới đây để hiểu rõ hơn:
Ví dụ
def dig_prod(digits):
product = 1
for d in digits:
product *= d
return product
def solve(num):
num_str = str(num)
length = len(num_str)
digits = [None] * length
prod_set = set()
for i in range(length):
digits[i] = int(num_str[i])
for i in range(length):
for j in range(i, length):
item = dig_prod(digits[i:j+1])
if item in prod_set:
return False
else:
prod_set.add(item)
return True
n = 235
print(solve(n))
Đầu vào
235
Đầu ra
True