私は手足に行くと、あなたのコードから基づいて、欲しいものを推測しようとするでしょう - これは基本的にただ一つの変数を保持し、各ループ上の最小値をチェック(および必要に応じて、適宜更新)されます:
base, area = input().strip().split()
base, area = int(base), int(area)
min_pos = 1
min_trig = abs(base/2 - area) # calculate the first immediately
for i in range(2, area + 1): # loop from the second...
form = abs((base * i)/2 - area)
if form < min_trig:
min_pos = i
min_trig = form
print(min_pos)
UPDATE
コメントで述べたような一つの最小が存在する場合にのみ、それは正しいであろうように、上記は、単一の最小値のインデックスを見つけます。あなたが最小値のリストが必要な場合は、次のように行うことができます。
base, area = input().strip().split()
base, area = int(base), int(area)
min_pos = [1] # initialize the first index as a minimum immediately
min_trig = abs(base/2 - area) # calculate the first trig as a minimum immediately
for i in range(2, area + 1): # loop from the second...
trig = abs((base * i)/2 - area)
if trig == min_trig:
min_pos.append(i)
elif trig < min_trig:
min_pos = [i]
min_trig = trig
print(min_pos) # prints you a list of all minimum positions
あなたが別のリストにすべてのものを保存する必要はありませんもあなたは、二重ループを行う必要がありますこの方法。純粋なO(N)溶液。
私が間違っている場合は私を修正しますが、最初の値は常に最小のものではありません...? –
ここでは正確に何を達成しようとしていますか? – zwer
minの値を 'minTrig = min(trig)'のような変数に格納し、 'if form == minTrig:'でその値を使うことができます。これを行うことで、2回目のforループで毎回 'min()'を呼び出すことはありません。 – DarkCygnus