Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Kiểm tra xem tất cả các số con có tích chữ số khác nhau hay không trong Python


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.
  • 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