python中for循环嵌套例子_在Python中表示嵌套的for循环

您正在解决一个简单的Diophantine方程,并使用以下Python代码来完成它.

## 3a+b+c+d=10

r=10/3

for a in range(r, 0, -1):

r=10-3*a

for b in range(r, 0, -1):

r=10-3*a-b

for c in range(r, 0, -1):

d=10-3*a-b-c

if d>0:

print a, b, c, d, 3*a + b + c + d

在保留代码的基本特征的同时,你如何“很好地”代表它,以便它扩展到在丢番图方程中提供更多变量?

有九种解决方案:

1 6 1

1 5 2

1 4 3

1 3 4

1 2 5

1 1 6

2 3 1

2 2 2

2 1 3

解决方法:

我将创建一个递归生成器函数,其中参数是总和s和每个元素的乘数:

def solve(s, multipliers):

if not multipliers:

if s == 0:

yield ()

return

c = multipliers[0]

for i in xrange(s // c, 0, -1):

for solution in solve(s - c * i, multipliers[1:]):

yield (i, ) + solution

for solution in solve(10, [3, 1, 1]):

print solution

结果:

(2, 3, 1)

(2, 2, 2)

(2, 1, 3)

(1, 6, 1)

(1, 5, 2)

(1, 4, 3)

(1, 3, 4)

(1, 2, 5)

(1, 1, 6)

标签:python,for-loop,representation,diophantine

来源: https://codeday.me/bug/20190829/1764481.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值