个人信息
知乎:凯强同学
蓝桥杯笔记:https://mbd.pub/o/bread/ZpWbmJ9x
CSDN主页:凯强同学
代码
from itertools import permutations as pm
# 获取输入的目标数字
n = int(input()) # 输入的目标数字
ans = 0
all_digits = pm(range(1, 10)) # 创建1到9的排列
# 生成所有可能的排列
for perm in all_digits:
# 将排列转换为字符串并遍历所有可能的分割位置
a = 0 # 初始化整数部分
for i in range(len(str(n))): # 遍历整数部分的位置
a = a * 10 + perm[i] # 将整数部分累加
if a >= n:
break # 如果整数部分已经大于等于n,跳出循环
# 分割剩下的部分
for j in range(i + 1, 8): # j >= i + 1,避免分割后的部分为空
b = c = 0
for k in range(i + 1, j + 1): # 计算分子b
b = b * 10 + perm[k]
for l in range(j + 1, 9): # 计算分母c
c = c * 10 + perm[l]
# 检查是否满足带分数的条件
if b%c== 0 and a + b // c == n: # 分母不为零,且满足条件
ans += 1 # 符合条件,增加计数
# 输出符合条件的表示法数量
print(ans)