P136SUMD - SUM6 D - Mua kẹo

Link Sub: http://www.spoj.com/PTIT/problems/P136SUMD/
Người Gửi: Dương Lee

  • Problem:

Tèo xin tiền mẹ để đi mua kẹo. Tèo chạy ra cửa hàng bánh kẹo và mua rất nhiều. Đến khi thanh toán, Tèo mới để ý rằng mẹ chỉ đưa cho mình các tờ tiền có mệnh giá là lũy thừa của 10: 1, 10, 100, 1 000, ... , 1 000 000 000. Chủ cửa hàng cũng thông cảm cho Tèo, vì vậy đã quyết định làm tròn số tiền sao cho Tèo có thể dễ dàng thanh toán được, dĩ nhiên trong trường hợp bên thiệt bên lời là bằng nhau, chủ cửa hàng sẽ ưu tiên mình trước. Chẳng hạn Tèo mua kẹo hết 150 đồng, nhưng trong tay chỉ có các tờ tiền có mệnh giá từ 100, 1000 ... thì Tèo sẽ phải trả 200 đồng, nhưng nếu số tiền mua kẹo chỉ là 149 đồng, thì chủ cửa hàng sẽ chỉ tính 100 đồng.  
Nhiệm vụ của các bạn là hãy giúp Tèo tính số tiền cần phải thanh toán.

Input
Gồm 2 số nguyên C và K (0 ≤ C ≤ 10^9, 0 ≤ K ≤ 9) lần lượt là số tiền cần thanh toán và số chữ số 0 nhỏ nhất trong các mệnh giá tiền mà Tèo có.
Output
In ra một số nguyên duy nhất V, là số tiền gần đúng nhất mà Tèo có thể trả.
Example:
Input
184 1
Output:
180

Input
123450995 1
Output:
123451000
Input
182 2
Output:
200
  • Solution:

Bài này thực chất là làm tròn số:
- TH1 (case_1) Ta sẽ tính số tiền lớn nhất mà <= C từ mệnh giá tiền bé nhất;
- TH2 (case_2) Ta sẽ tính số tiền nhỏ nhất mà >= C từ mệnh giá tiền bé nhất;
Theo quy tắc làm tròn thì số C gần với trường hợp nào hơn thì sẽ trả tiền theo trường hợp đó. Trong trường hợp mà C nằm giữa cả 2 case thì Tèo sẽ phải trả case_2 (ưu tiên ông chủ).
p/s: Tèo cầm 1 tỷ đi mua kẹo. Ok! Rich man :v

  • Code:

C++:

https://ideone.com/fCqhZD
#include <iostream>
using namespace std;

int main ()
{
    long C, K;
    cin>>C>>K;
    // try: C = 1284, K = 2
    long min_money = 1;
    for (int i=1; i<=K; i++)
        min_money*=10;  // try -> min_money = 100
    
    long case_1 = (C/min_money)*min_money;    // try-> case_1 = 1200
    long case_2 = case_1 + min_money;    // try -> case_2 = 1300
    
    if (C-case_1 >= case_2-C)    // try -> C-case_1 = 84, case_2-C = 16
        cout<<case_2;
    else cout<<case_1;
    return 0;
}

JAVA:

...

Python:

...

Share this

Related Posts

Previous
Next Post »