🔗 🟢 2806. Account Balance After Rounded Purchase 1215

tags: Biweekly Contest 110 數學(Math)

題意

起初,你的餘額為 100100 元。

給定一個整數 purchaseAmount\text{purchaseAmount},表示你將購買的商品價格。

在一家商店中,購買金額將四捨五入到 最接近1010倍數 。換句話說,你將支付一個非負金額 roundedAmount\text{roundedAmount},使得 roundedAmount\text{roundedAmount}1010 的倍數,並且 roundedAmountpurchaseAmount|\text{roundedAmount} - \text{purchaseAmount}| 最小

如果存在多個最接近的 1010 的倍數,則 較大的倍數 是你的實際支出金額。

請你返回一個整數,表示你在購買價值 purchaseAmount\text{purchaseAmount} 元的商品後剩下的餘額。

注意:在此問題中,00 被視為 1010 的倍數。

思路

方法一:按照題意計算

按照題意,我們可以先將購買金額除以 1010,得到商數 xx,然後計算兩個數值,分別是 cost1=x×10cost1 = x \times 10cost2=(x+1)×10cost2 = (x + 1) \times 10,這兩個數值代表最接近 purchaseAmount\text{purchaseAmount} 的兩個倍數,且 cost1purchaseAmount<cost2cost1 \leq \text{purchaseAmount} < cost2。比較 purchaseAmount\text{purchaseAmount} 與這兩個數值的差值,最接近 purchaseAmount\text{purchaseAmount} 的數值即為實際的購買金額。若兩個數值與 purchaseAmount\text{purchaseAmount} 的差值相同,則較大的數值即為實際的購買金額。

複雜度分析

  • 時間複雜度:O(1)\mathcal{O}(1)
  • 空間複雜度:O(1)\mathcal{O}(1)
1
2
3
4
5
6
7
8
class Solution:
def accountBalanceAfterPurchase(self, purchaseAmount: int) -> int:
x = purchaseAmount // 10
cost1, cost2 = x * 10, (x + 1) * 10
if purchaseAmount - cost1 < cost2 - purchaseAmount: # 較小的 roundedAmount 比較接近 purchaseAmount
return 100 - cost1
else: # 較大的 roundedAmount 比較接近 purchaseAmount 或 兩者一樣接近
return 100 - cost2
1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
int accountBalanceAfterPurchase(int purchaseAmount) {
int x = purchaseAmount / 10;
int cost1 = x * 10, cost2 = (x + 1) * 10;
if (purchaseAmount - cost1 < cost2 - purchaseAmount)
return 100 - cost1;
else
return 100 - cost2;
}
};

方法二:數學(Math)

事實上,題意就是對購買金額 四捨五入 到十位數。因此可以利用數學計算的方式來取得最接近的倍數。將 purchaseAmount\text{purchaseAmount} 加上 55 再除以 1010 並取整數部分,最後再乘以 1010,即可得到 purchaseAmount\text{purchaseAmount} 四捨五入到十位數後的值。然後用 100100 減去這個數值即為答案。

複雜度分析

  • 時間複雜度:O(1)\mathcal{O}(1)
  • 空間複雜度:O(1)\mathcal{O}(1)
1
2
3
4
class Solution:
def accountBalanceAfterPurchase(self, purchaseAmount: int) -> int:
cost = (purchaseAmount + 5) // 10 * 10
return 100 - cost
1
2
3
4
5
6
class Solution {
public:
int accountBalanceAfterPurchase(int purchaseAmount) {
return 100 - (purchaseAmount + 5) / 10 * 10;
}
};

寫在最後

Cover photo is generated by @たろたろ, thanks for their work!