我有這個問題,我們可以撰寫一個 python 代碼來確定 x,y,z 的總和和乘積由用戶給出。它可以回傳三個數字,其和和乘積是輸入。例如... 3 3 5 = 11 和 3x3x5=45,所以當我給計算機 11 和 45 時,它回傳 3,3,5。我想知道有沒有辦法做到這一點。
uj5u.com熱心網友回復:
穴居人方法(具有極少量動態編程的蠻力)。MiTriPy 的答案概括為 n 個變數,盡管可能沒有更高的性能。
def solve(eqsum, eqprod):
solution_count = 0
for x in range(0, eqsum 1):
for y in range(0, eqsum 1-x):
for z in range(0, eqsum 1-x-y):
if x y z == eqsum:
if x*y*z == eqprod:
print(f"x={x} y={y} z={z}")
solution_count = 1
print(f"Found {solution_count} solutions.");
solve(eqsum=11, eqprod=45)
uj5u.com熱心網友回復:
做了一些快速且非常笨拙的事情:
import itertools
from numpy import prod
def find_subset_of_numbers(number, product):
subset_of_numbers = [x for x in range(1, number 1)]
for x in range(1, number 1):
subset_of_numbers.append(x)
for x in range(1, number 1):
subset_of_numbers.append(x)
result = [seq for i in range(3, 0, -1)
for seq in itertools.combinations(subset_of_numbers, i)
if sum(seq) == number and len(seq) == 3 and prod(seq) == product]
return result
這不會很好地處理重復,但您可以為此添加另一個檢查:
print(find_subset_of_numbers(11, 45))
output: [(3, 5, 3), (3, 5, 3), (3, 3, 5), (3, 3, 5), (3, 5, 3), (3, 3, 5), (5, 3, 3), (3, 5, 3), (3, 3, 5)]
uj5u.com熱心網友回復:
這是一個相當有效的解決方案。
from collections.abc import Iterator
from math import sqrt
def solve(target_sum: int, target_prod: int) -> Iterator[tuple[int, int, int]]:
for x in range(1, target_sum):
if target_prod % x:
continue
rest_sum = target_sum - x
try:
desc = sqrt(rest_sum ** 2 - 4 * (target_prod // x))
except ValueError:
continue
if desc.is_integer():
yield (x, rest_sum int(desc), rest_sum - int(desc))
yield (x, rest_sum - int(desc), rest_sum int(desc))
它使用的事實是,如果x y = s且xy = p,則 { x , y } = { s ± √( s 2 ? 4 p )}。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/409746.html
標籤:
上一篇:ValueError:x和y必須具有相同的第一維,但具有形狀(165,)和(166,)
下一篇:PythonGoogleSearch模塊錯誤:“TypeError:search()gotanunexpectedkeywordargument'tld'”
