题解 | 星际跃迁的稳定信标

星际跃迁的稳定信标

https://www.nowcoder.com/practice/e58f3ad5b0724ac5846a4ad2d7c6ef5d

一种按规则枚举的方法,更容易想出来

def is_prime(num):
    if num == 2:
        return True
    if num < 2:
        return False
    for demon in range(2, int(num**0.5)+1):
        if num % demon == 0:
            return False
    return True


def main():
    f_max = map(int, list(input()))
    f = []
    reduced = False
    for i, d in enumerate(f_max):
        if i == 0:
            f.append(d)
        elif reduced:
            f.append(9)
        else:
            f.append(d)
            for j in range(0, i):
                if f[i-j] < f[i-j-1]:
                    f[i-j-1] -= 1
                    f[i-j] = 9
                    reduced = True
    
    l = len(f)
    while f[-1] > 0:
        if is_prime(sum(f)):
            return int("".join(map(str, f)))
        f[-1] -= 1
        for i in range(1, l):
            if f[-i] < f[-i-1]:
                f[-i-1] -= 1
                f[-i] = 9
    
    return -1


out = main()
print(out)

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务