【問題描述】:給定一個數組,在數組中找到兩個數,使它們的和最接近目標值的值但不超過目標值,然后返回它們的和。
【問題示例】:輸入target=15,array=[1,3,5,11,7],輸出14,3+11=14。
完整代碼如下:
a=list(map(int,input().split()))
b=int(input())
d=[]
for i in range(0,len(a)):
? ? if a[i]>b:
? ? ? ? del a[i]
for j in range(0,len(a)):
? ? for k in range(0,len(a)):
? ? ? ? if a[j]+a[k]-b<=0:
? ? ? ? ? ? d.insert(0,abs(a[j]+a[k]-b))
for l in range(0,len(d)):
? ? if d[l]==min(d):
? ? ? ? e=d[l]
print(b-e)
代碼解釋:
“a=list(map(int,input().split()))
b=int(input())
d=[] ”,讓用戶輸入一個數組,接著輸入目標值,建立一個空列表d。
“for i in range(0,len(a)):
? ? if a[i]>b:
? ? ? ? del a[i] ?”,將用戶輸入的數組中大于目標數的數值刪除(因為要保證兩個數的和不超過目標值)。
“for j in range(0,len(a)):
? ? for k in range(0,len(a)):
? ? ? ? if a[j]+a[k]-b<=0:
? ? ? ? ? ? d.insert(0,abs(a[j]+a[k]-b)) “,,遍歷數組,篩選出和不超過目標值的兩個數,然后將兩個數的和減去目標值的絕對值插入列表d中。
” for l in range(0,len(d)):
? ? ?if d[l]==min(d):
? ? ? ? e=d[l] ?“,遍歷完數組后,遍歷列表d,求出d中的最小值,然后將其賦給e。 ? ? ? ??
“print(b-e) ”,打印目標值與最小絕對值的差,即為和最接近但不超過目標值的兩個數的和。
運行效果展示:
?
? ?(聲明:以上內容均為原創)?
?