楞次小霖 2023-12-27 21:16 采纳率: 60%
浏览 16

Python回溯实现n位逐位整除数

求解答,是哪里出错了😭😭

n位逐位整除数:从其高位开始,高1位能被1整除(显然), 高2位能被2整除,…,整个n位数能被n整除。

对于指定的正整数n,共有多少个不同的n位高逐位整除数?输出每一个n位高逐位整除数。

n=int(input("n="))
k=1
a=[0]*(n+1)
a[k]=1
s=0
while True:
    g=0
    for i in range(1,k):
        g=g*10+a[i]
        g=g%k
    if g==0:
        t=0
        if k==n:
            s+=1
            print(a[1:k+1])
        else:
            k+=1
            a[k]=1
            continue
    else:
        t=1
        a[k]+=1
    while k>1 and a[k]>9:
        a[k]=0
        k-=1
if s==0:
    print("无解!")
else:
  • 写回答

2条回答

  • 关注

    你这个代码呢…我懒得看了,参考一下我的这个代码,找着原因哈!

    
    def is_divisible(num_str):
        for i in range(1, len(num_str) + 1):
            if int(num_str[:i]) % i != 0:
                return False
        return True
    
    def backtrack(n, num_str):
        if len(num_str) == n:
            if is_divisible(num_str):
                print(num_str)
            return
        for i in range(1, 10):
            if num_str == '' or int(num_str[-1]) % i == 0:
                new_num_str = num_str + str(i)
                backtrack(n, new_num_str)
    
    def find_divisible_numbers(n):
        backtrack(n, '')
    
    n = 3
    find_divisible_numbers(n)
    

    输出结果:

    132
    264
    396
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月27日