用python解决4*ABCD = DCBA

2024-09-27 23:22:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我还是个初学者,我正在尝试做以下练习:

A、B、C和D都是不同的数字。数字DCBA等于数字ABCD的4倍。数字是多少?注:要使ABCD和DCBA成为常规数字,A和D都不能为零。使用四重嵌套循环。在

我被困在这里:

for A in range(0,9):
    for B in range(0,9):
        for C in range(0,9):
            for D in range(0,9):

如何使用四重嵌套循环求解4*ABCD=DCBA?在


Tags: inforrange数字常规嵌套循环abcd初学者
3条回答

你就快到了——你唯一缺少的就是把数字转换成一个整数,比如用它们各自的“位置”乘以它们。顺便说一句,如果A和D不能为0,则应将其从值范围中排除:

for a in range(1,9):
    for b in range(0,9):
        for c in range(0,9):
           for d in range(1,9):
               if 4* (1000 * a + 100 * b + 10 * c + d) == \
                  (a + 10 * b + 100 * c + 1000 * d):
                   print "a=%d b=%d c=%d d=%d" % (a, b, c, d)

顺便说一下,结果是:

^{pr2}$

以下打印所有解决方案,不需要四重嵌套循环:

    for i in range(1000,10000):
        if i==4*int(str(i)[::-1]):
            print(i)

这是一个约束编程问题,可以这样解决: 需要pip安装python约束

from constraint import *
problem = Problem()
l = range(10)
for v in ["a", "b", "c", "d"]:
    problem.addVariable(v, l)
problem.addConstraint(AllDifferentConstraint())
problem.addConstraint(lambda a, b, c, d : 4*(a*1000+ b*100+ c*10 + d) == 1000*d + 100*c + 10*b + a,
                      ("a", "b", "c", "d"))
print problem.getSolutions()

这里的计算时间可以忽略不计,但是对于更复杂的问题,由于搜索空间得到了有效的搜索,计算时间可能比嵌入循环要短得多

相关问题 更多 >

    热门问题