Cho hai số. Nhiệm vụ kiểm tra xem chúng có phải anagram của nhau trong biểu diễn nhị phân hay không. Có thể giải quyết nhanh trong Python dùng Counter(iterable) và so sánh từ điển.
Ví dụ
Input: a = 8, b = 16 Output : Yes Biểu diễn nhị phân của cả hai số có cùng số 0 và 1.
Thuật toán
Bước 1: Cho hai số. Bước 2: Chuyển cả hai sang nhị phân bằng bin() và bỏ hai ký tự đầu do bin(). Bước 3: Vì biểu diễn nhị phân có thể khác độ dài nên thêm số 0 ở đầu chuỗi ngắn hơn để hai chuỗi bằng nhau. Bước 4: So sánh hai từ điển, nếu giá trị 0 và 1 trong cả hai bằng nhau thì là anagram ngược lại không. Chuyển biểu diễn nhị phân thành từ điển.
Mã ví dụ
# Hàm kiểm tra biểu diễn nhị phân # của hai số có phải anagram from collections import Counter def anagramoftwonumber(p1, p2): # Chuyển số sang nhị phân # và bỏ hai ký tự đầu # vì bin thêm '0b' làm tiền tố bno1 = bin(p1)[2:] bno2 = bin(p2)[2:] # Thêm số 0 vào chuỗi ngắn hơn zeros = abs(len(bno1) - len(bno2)) if (len(bno1) > len(bno2)): bno2 = zeros * '0' + bno2 else: bno1 = zeros * '0' + bno1 # Chuyển biểu diễn nhị phân # thành từ điển dict1 = Counter(bno1) dict2 = Counter(bno2) # So sánh hai từ điển if dict1 == dict2: print(p1, p2, "là hai số anagram") else: print(p1, p2, "không phải số anagram") # Chương trình chính if __name__ == "__main__": n1 = int(input("Nhập Số Thứ Nhất ::>")) n2 = int(input("Nhập Số Thứ Hai ::>")) anagramoftwonumber(n1, n2) Kết quả
Nhập Số Thứ Nhất ::>8 Nhập Số Thứ Hai ::>16 8 16 là hai số anagram Nhập Số Thứ Nhất ::>3 Nhập Số Thứ Hai ::>2 3 2 không phải số anagram