📅  最后修改于: 2023-12-03 14:50:38.146000             🧑  作者: Mango
对于一个数能否被 50 整除,只需要判断其末两位是否能被 50 整除即可。因此,我们只需要在 N 位数字中,找到最大的末两位能被 50 整除的数字组合即可。
首先我们需要明确,末两位能被 50 整除,即这两个数是 00、50 或者 70。而一个 N 位数字由 0 和 7 组成,那么末两位必定是由 0 和 7 组成的。
接下来考虑如何构造最大的 N 位数字。
首先将所有位都填为 7,这样可以保证这个数尽可能大。
然后从最高位开始往低位遍历,如果遇到某一位填为 7 后,末两位不能被 50 整除,那么就将该位置变为 0,并将低位全部填为 7。
具体实现可以按如下伪代码:
num = "7" * N # 将所有位都填为 7
for i in range(N-1, 1, -1):
if num[-2:] in ["00", "50", "70"]:
break # 当最后两位可以被 50 整除时,跳出循环
if num[i] == "7":
num = num[:i] + "0" + "7"*(N-i-1) # 将该位置变为 0,并将低位全部填为 7
if num[-2:] not in ["00", "50", "70"]:
num = "-1" # 没有符合要求的数字组合,返回 -1
这样,我们就可以找到最大的由 0 和 7 组成的 N 位数字,使其末两位能被 50 整除。
完整代码如下:
def find_max_num(N):
num = "7" * N # 将所有位都填为 7
for i in range(N-1, 1, -1):
if num[-2:] in ["00", "50", "70"]:
break # 当最后两位可以被 50 整除时,跳出循环
if num[i] == "7":
num = num[:i] + "0" + "7"*(N-i-1) # 将该位置变为 0,并将低位全部填为 7
if num[-2:] not in ["00", "50", "70"]:
return "-1" # 没有符合要求的数字组合,返回 -1
return num
代码测试:
print(find_max_num(4)) # 输出 7770
print(find_max_num(5)) # 输出 77770
print(find_max_num(6)) # 输出 777770
print(find_max_num(7)) # 输出 7777770
print(find_max_num(8)) # 输出 77777770
print(find_max_num(9)) # 输出 777777770
print(find_max_num(10)) # 输出 7777777770
print(find_max_num(11)) # 输出 77777777770
以上代码均可以顺利运行,并输出符合要求的数字。