求一个多元一次函数的可能解
cu的大神们,小弟学艺不精,请教个问题对于给定的元祖(或者列表)a,求元祖(或者列表)中各个元素乘一个整数然后在求和等于一个常数b
例子:a=(1,2,3),b=100,求1*x + 2 * y + 3 * z = 100中x,y,z的可能解对应的表达式。
解有:
1*100 +2 *0 +3*0=100
1*98 + 2 *1 +3 *0 =100
等
那元祖(或者列表)如果为定长,那么尚可把每个可能遍历求解,那么如果元祖(或者列表)是未知长度呢?
求给个思路或者给段核心代码,谢谢 for x in xrange(100):
for y in xrange(50):
for z in xrange(33):
if x + 2*y + 3 * z == 100:
print("x=%d,y=%d,z=%d" % (x,y,z)) #一条直线方程,解的个数是无限的,我暂且假定,楼主想要的是只有非负整数解。
a = (1, 2, 3)
b = 100
for x in range(0, b // a):
for y in range(0, b // a):
for z in range(0, b // a):
if a * x + a * y + a * z == b:
print('{i} * {x} + {j} * {y} + {k} * {z} = {b}'.format(
i = a, j = a, k = a, x = x, y = y, z = z, b = b))
回复 3# ssfjhh
就是你理解的意思
那如果 a这个元祖 长度不定呢?
总不能这样子遍历啊 我提问上说道了
麻烦解答下呢
回复 2# bikong0411
这个是简单,如果a的元素长度不定呢
回复 5# NO_Getway
显而易见,递规解决,代码只能晚上给你。 回复 1# NO_Getway
你可以尝试使用SymPy的Solver,这个可以的。 回复 6# ssfjhh
写了个递归的代码,按照你的思路,还能改进吗?
、def printResult(A,a,b):
result = []
for ll,ai in zip(A,a):
result.append( ' {} * {} '.format(ll,ai))
print "+".join(result)+" = {} ".format(b)
def solveEq(a,b,P,A,i):
if i == len(P):
s = sum()
if s == b :
printResult(A,a,b)
return
for j in range(P):
A = j
solveEq(a,b,P,A,i+1)
a = (1,2,3)
b = 10
P =
A = * len(a)
solveEq(a,b,P,A,0)
结果: 0 * 1 + 2 * 2 + 2 * 3= 10
0 * 1 + 5 * 2 + 0 * 3= 10
1 * 1 + 0 * 2 + 3 * 3= 10
1 * 1 + 3 * 2 + 1 * 3= 10
2 * 1 + 1 * 2 + 2 * 3= 10
2 * 1 + 4 * 2 + 0 * 3= 10
3 * 1 + 2 * 2 + 1 * 3= 10
4 * 1 + 0 * 2 + 2 * 3= 10
4 * 1 + 3 * 2 + 0 * 3= 10
5 * 1 + 1 * 2 + 1 * 3= 10
6 * 1 + 2 * 2 + 0 * 3= 10
7 * 1 + 0 * 2 + 1 * 3= 10
8 * 1 + 1 * 2 + 0 * 3= 10
10 * 1 + 0 * 2 + 0 * 3= 10 回复 6# ssfjhh
先谢谢了
回复 8# Hadron74
Nice。
@NO_Getway