Tìm số đối xứng theo quy tắc

Số đối xứng là số có thể viết từ trái sang phải các chữ số của nó ta vẫn được chính nó. Từ một số có hai chữ số ta có thể nhận được một số đối xứng theo cách sau: lấy số ban đầu cộng với số ánh xạ gương của nó(tức là số nhận được bằng cách đọc các chữ số từ phải sang trái). Nếu chưa phải là số đối xứng, số đó lại được cộng với ánh xạ gương của nó và tiếp tục như vậy cho đến khi nhận được số đối xứng.

Ví dụ

  • Từ số 48 ta có 48 + 84 = 132, 132 + 231 = 363 . Như vậy symmetricnumber(48) = 363

Viết chương trình nhập vào số nguyên dương n (11 ≤ n ≤ 99) và in ra số đối xứng nhận được theo qui tắc trên.
ai giúp e câu này với ạ e hơi lú @@

Bài này có 2 điểm mấu chốt cần phải giải là:

  1. Làm sao để biết số đó có phải là số đối xứng không?

  2. Làm sao để tạo ra một số ánh xạ gương của số cho trước?

Ở điểm thứ nhất, anh gợi ý như sau: Cho số đối xứng 123321, a = 1, n = độ dài của số(số các chữ số trong số). Em hãy thử so sánh chữ số ở vị trí thứ a với chữ số ở vị trí n, chữ số ở vị trí a + 1 với chữ số ở vị trí n - 1, chữ số ở vị trí a + 2 với chữ số ở vị trí n - 2,… chữ số ở vị trí n chia 2 lấy nguyên và chữ số ở vị trí n - (n chia 2 lấy nguyên) + 1.

Điểm thứ 2 thì từ điểm thứ nhất mà em suy ra nha

5 Likes

Muốn sử dụng theo cách này thì số cần kiểm tra phải ở dạng xâu đúng ko ạ. Vì em thấy đâu xác định trước đc số cần đối chiếu có bao nhiêu chữ số. Nếu ở dạng số thì phải viết thêm 1 hàm đệ quy đếm số chữ số nữa.
Em có ý tưởng này có lẽ là nhanh hơn(em nghĩ là nhanh hơn thôi):Tạo số ánh xạ gương trước rồi so sánh số đó với số ban đầu. Nếu bằng thì là số đối xứng.

1 Like

Phương pháp của anh không cần xác định trước xem số cần đối chiếu có bao nhiêu chữ số đâu, ép sang kiểu chuỗi rồi tách từng kí từ ra, chuyển các kí tự đó thành số rồi dùng hàm len() là xong.

Nếu không bằng thì sao :thinking: ?

4 Likes

3 posts were merged into an existing topic: Topic lưu trữ các post off-topic - version 3

Khen Python thì qua topic khác nhé :v

n = 99


def check_if_symmetricnumber(n):
    # [::-1] <-- đảo chuỗi
    # nếu chuỗi đã đảo lại vẫn giống chuỗi ban đầu thì là đối xứng
    return str(n) == str(n)[::-1]


while True:

    n = n + int(str(n)[::-1])
    print(n)

    if check_if_symmetricnumber(n):
        # nếu return true thì là tìm được số đối xứng, break 
        break

198
1089
10890
20691
40293
79497
[Finished in 0.3s]

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?