Python中生成合规“美观数”的最小操作次数问题及代码优化
需求说明
给定数字N,可对其每一位数字进行增减操作,每次增减计为1次操作。美观数定义为仅由3和7组成,且7不能出现在3之前(例如733不属于美观数,合规示例包括3、7、33、37、77等)。需要计算将N转换为美观数所需的最小操作次数。
现有代码及问题
我编写了如下Python代码:
Num = input() N = [int(x) for x in str(Num)] cnt = 0 cft = 0 cfs = 0 def checkcft(N): #check the step to change the number to whole sevens or whole threes global cft if N[i] == 9: cft += 5 elif N[i] > 3: cft += N[i] - 3 else: cft += 3 - N[i] def checkcfs(N): global cfs if N[i] == 2: cfs += 5 elif N[i] > 2: cfs += N[i] - 2 else: cfs += 3 - N[i] for i in range(len(N)): N[i] = int(N[i]) checkcft(N) checkcfs(N) if N[i]==0: cnt += 3 elif N[i] == 5: cnt += 2 else: if abs(7-N[i]) < abs(3-N[i]): cnt += abs(7-N[i]) else: if i == 0: cnt += abs(3-N[i]) else: if N[i-1]==7: cnt += abs(7-N[i]) print(min(cnt, cft, cfs))
这段代码存在以下问题:
- 处理数字643时,代码计算得出只需2次操作得到733,但733不符合美观数的定义,正确结果应该是转换为333,需要4次操作。
- 尝试通过检查前一位是否为7来修正逻辑时,又遇到新问题:比如三位数abc的场景,无法判断哪种转换路径(如b转为3、c转为7,或b转为7、c转为7)的操作次数更少。
内容的提问来源于stack exchange,提问作者Codeer
相关产品推荐
相关产品推荐

