Để chuẩn bị
cho khoá học lập trình trong hè, bạn Nam đã đến cửa hàng văn phòng phẩm để mua
các quyển tập ghi chép. Khoá học lập trình gồm 3 môn học, nên Nam dự định mua
các quyển tập cho 3 môn sao cho số tập của mỗi môn là như nhau. Cửa hàng có hai
loại gói: loại gói có một quyển tập giá mỗi gói a đồng, loại gói có hai quyển tập giá mỗi gói b đồng. Năm học vừa rồi Nam còn lại n quyển tập chưa dùng đến, anh ấy định mua thêm một số quyển tập nữa
để bổ sung cho đủ số.
Yêu
cầu: Hãy tính xem số tiền ít nhất mà Nam phải trả để mua các quyển tập bổ
sung thêm sao cho tổng số quyển tập chia đều cho ba môn học.
Dữ
liệu vào: Cho tệp văn bản MUATAP.INP
chỉ có một dòng chứa ba số nguyên lần lượt là n, a, b (1<=n, a, b <=10^9)
Kết
quả: Ghi ra tệp văn bản MUATAP.OUT
trên một dòng gồm số nguyên là số tiền ít nhất mà bạn Nam phải trả.
Ví dụ:
MUATAP.INP |
MUATAP.OUT |
1 1 3 |
2 |
4 2 3 |
3 |
6 4 4 |
0 |
Giải thích: Trong ví dụ thứ nhất, bạn Nam đã có sẵn 1 quyển tập, bạn ấy mua thêm (ít nhất) 2 quyển để được 3 quyển chia đều cho 3 môn, và bạn Nam mua 2 gói loại một quyển với giá 2a = 2. Ở ví dụ thứ hai, bạn Nam cần mua thêm 2 quyển tập và bạn ấy mua 1 gói loại hai quyển có giá b = 3. Trong ví dụ thứ ba, số quyển tâp hiện có là 6 quyển có thể chia đều cho 3 môn nên bạn Nam không cần mua thêm.
CODE THAM KHẢO:
program Mua_Tap;
Const fi = 'MUATAP.INP';
fo = 'MUATAP.OUT';
Var n,a,b,S,k:Longint;
f:Text;
Function min(a, b: Longint) : Longint;
Begin
If (a<b) then min:=a
Else min:=b;
End;
Begin
Assign(f,fi);
Reset(f);
Read(f,n,a,b);
Close(f);
k := 3 - n mod 3;
If k=2 then S := min (2*a,b);
If k=1 then S := min (a,2*b);
If k=0 then S := 0;
Assign(f,fo);
ReWrite(f);
Write(f,S);
Close(f);
End.
Đăng nhận xét