我想創建一個函式,給定一個像 7 這樣的數字,我想將這個數字分解為 3 和 2。如果留下余數,則回傳 -1。
注意:通過進一步的示例,似乎任何數字都可以由 3s 和 2s 的倍數相加組成,因此不需要余數 -1。目標是在必須添加 2 的倍數以完全分解之前獲得盡可能多的 3
例如,給定數字 11,我希望函式回傳 3:3 和 2:1,因為 3 適合 11 3 次和 2 一次,即。3 2 2=7, 3 3 3 2=11, 3 3 3 2 2=13。首選項應該能夠首先容納盡可能多的 3 分。
這是更廣泛問題的一部分:
from collections import Counter
#Choose two packages of the same weight
#Choose three packages of the same weight
#Minimum number of trips to complete all the deliveries else return -1
def getMinimumTrips(weights):
weights_counted = Counter(weights)
minimum_trips = 0
print(weights_counted)
for i in weights_counted:
if weights_counted[i]==1:
return -1
elif weights_counted[i]%3==0:
minimum_trips = (weights_counted[i]//3)
elif weights_counted[i]%2==0:
minimum_trips = (weights_counted[i]//2)
return minimum_trips
print(getMinimumTrips([2, 4, 6, 6, 4, 2, 4]))
可能的解決方案:
#Looking at inputs that are not a multiple of 3 or 2 eg, 5, 7, 11, 13
def get_components(n):
f3 = 0
f2 = 0
if n%3==1:
f3 = (n//3)-1
f2 = 2
elif n%3==2:
f3 = (n//3)
f2=1
return f"3:{f3}, 2:{f2}"
uj5u.com熱心網友回復:
如果給定一些整數值x,我們有3種不同的情況:
x == 3 * n,解決方法:回傳3n次數。最簡單的情況。x == 3 * n 1,解決方法:回傳3n - 1次數,然后回傳22次數,注意我們可以把3 * n 1 == 3 * (n - 1) 2 2x == 3 * n 2,解決方法:回傳3n次數,然后回傳2。
正如人們在案例#1和#3解決方案中所看到的那樣;如果#2沒有解決方案(x = 1我們無法回傳 3 -1時間)。到目前為止,如果x <= 1我們回傳-1(沒有解決方案)那么好,否則我們執行整數除法 //并獲得n,然后找到余數 %并獲取案例(余數0代表案例#1,1案例#2,2案例#3)。由于這個問題看起來像一個家庭作業,讓我把剩下的(即確切的代碼)留給你來實作。
uj5u.com熱心網友回復:
如果您可以完全分解數字,這將回傳 0,如果剩余 1,則回傳 -1:
return -(i % 3 % 2)
如果這有幫助?
uj5u.com熱心網友回復:
嘗試使用此方法math.floor()
import math
def get_components(n: int) -> str:
q3 = math.floor(n / 3)
q2 = math.floor(q3 / 2)
if not (q3 and q2):
return '-1' # returning '-1' as a string here for consistency
return f'3:{q3}, 2:{q2}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523719.html
標籤:Python算法功能数学
下一篇:EmacsLisp變數作用域
