Tìm số có các chữ số giảm dần nhỏ nhất lớn hơn n

Hải định nghĩa một số nsố suy giảm khi các chữ số trong n giảm dần.

Ví dụ 4, 93, 321 là các số suy giảm, còn 111, 322,... không là các số suy giảm .

Cho một trước một số nguyên dương n , hãy tìm và đưa ra số suy giảm nhỏ nhất lớn hơn n . Nếu không có số nào thỏa mãn yêu cầu thì trả về -1 .

đây là code của e

def reduction_number(n):
    l = []
    ans = []
    c=len(str(n))
    for i in range(n+1,pow(10,c)):
        a=list(map(int, str(i)))
        a.sort(reverse=True)
        b="".join(map(str,a))
        if i == int(b):
            l.append(i)
    for i in l:
        p = list(map(int,str(i)))
        for o in p:
            if p.count(o) >= 2:
                p.remove(o)
        p1="".join(map(str,p))
        if i == int(p1):
            ans.append(i)
    return min(ans)

có cách nào để không phải dùng 2 vòng for lồng nhau ko ạ ?

Tiêu đề topic bạn cần đặt cụ thể, vào thẳng nội dung của topic thay vì Lại là em đây nhé.

Cách đăng code lên DNH xem tại đây.


Muốn không dùng 2 vòng for lồng nhau thì viết thêm 1 hàm kiểm tra số suy giảm nữa.

5 Likes

Nhìn hãi quá. Từ n có thể tìm số liền sau chứ lại brute force à.

3 Likes

là như nào hả anh :V

Liền sau số 98 là số 210 :smiley: … cho đến 9’876’543’210 (lớn nhất)

Từ hàng cao nhất trở về ta xét 1) chữ số có khả dĩ không và 2) chữ số có đang giảm dần không.
Nếu 1) không thỏa ta gán lại cho đúng (+1?), nếu 2) không thỏa thì quay lại chữ số hàng ngay trên.

Khi vòng lặp trên chạy hết thì n đang là 1 số như vậy. Nếu +1 lên mà (2) không thỏa thì quay đầu cho đến khi đạt được, gán pattern nhỏ nhất vào là xong.

4 Likes
Đề này luôn luôn có số thỏa mãn mà nhỉ. Trừ khi nó lớn quá, không tính được. Nhưng với Python thì bao hết được mà.
2 Likes

là như nào thế a nói rõ hơn đc ko ạ @@

Tối về e sẽ thử @@ , thanks a

Là thế này thôi mà, có gì mà không rõ.

Bạn giải thích code bạn có tác dụng gì xem.

1 Like

E vừa ngồi nghĩ lại thấy e tư duy bài này hơi bị tù thật -_-

À, quên mất, số suy giảm lớn nhất là 9876543210. Vì thế số nào lớn hơn 9876543210 thì không thỏa mãn. :rofl:

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