計算に数か月を要する場合を除き、すべての組み合わせを実行することは悪い考えです。すべての数字が肯定的だった場合は、それらをすべて掛け合わせるだけです。もしすべてが否定的だったらあなたはそれらの数を取るでしょう。スキップしなければならない場合は、最大値をスキップします(-2は-5より大きい)。ミックスにゼロを追加すると、常にゼロが返されます。これは、前のいずれの場合よりも悪いです。正の数がなく、0または1つの負の数がある場合は、あなたが持っている最大の数を取ってください。それはゼロか唯一の負の数です。
def answer(xs):
mult = 1
valid = 0
for i in xs:
if i > 0:
mult *= i
valid = 1
negative = [i for i in xs if i<0]
negative.sort()
if(len(negative) & 1):
del negative[-1]
for i in negative:
mult *= i
valid = 1
if valid==0:
return max(xs)
return mult
、ここではいくつかのテストケースです:
xs = [0]
print(xs,"->",answer(xs)) #[0] -> 0
xs = [-1]
print(xs,"->",answer(xs)) #[-1] -> -1
xs = [0,-1]
print(xs,"->",answer(xs)) #[0, -1] -> 0
xs = [-2,-3]
print(xs,"->",answer(xs)) #[-2, -3] -> 6
xs = [-2,-3,-4]
print(xs,"->",answer(xs)) #[-2, -3, -4] -> 12
xs = [-2,-3,0]
print(xs,"->",answer(xs)) #[-2, -3, 0] -> 6
xs = [-2,3]
print(xs,"->",answer(xs)) #[-2, 3] -> 3
スタックオーバーフローは、動作しないコードに特化しています。 [codereview.se]でこれを尋ねるかもしれません。 – usr2564301
「1つまたは任意の番号」→それで何番ですか? – Veedrac