You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:25:28