Hướng dẫn giải của LOOP14: Tiền gửi ngân hàng
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
Anh Bo gửi ~N~ đồng với lãi suất ~10\%~ mỗi năm, lãi được làm tròn tới số nguyên gần nhất. Hết mỗi năm, lãi được cộng vào tiền gốc. Hỏi sau bao nhiêu năm số tiền đạt tối thiểu ~M~ đồng.
Cách làm
Gọi ~tien~ là số tiền hiện có, ban đầu ~tien = N~. Chừng nào ~tien < M~ thì ta tính thêm một năm.
Mỗi năm, tiền lãi là ~\frac{tien}{10}~ làm tròn tới số nguyên gần nhất. Cách làm tròn: 5.5 thành 6 và 5.4 thành 5, tức là làm tròn nửa lên. Vì vậy ta tính lãi bằng ~(tien + 5) / 10~ (phép chia nguyên), rồi cộng lãi vào ~tien~.
Ví dụ với ~N = 100~: năm 1 có 110, năm 2 có 121, năm 3 có 133, năm 4 có 146, năm 5 có 161. Vì ~161 \ge 160~ nên đáp số là 5.
Nên dùng kiểu ~long long~ để tránh tràn số.
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n, m;
cin >> n >> m;
long long tien = n; // số tiền hiện có trong ngân hàng
long long nam = 0; // số năm đã gửi
// Mỗi năm, tiền tăng thêm 10% và lãi được làm tròn tới số nguyên gần nhất
while (tien < m) {
// Làm tròn lãi: 5.5 thành 6, 5.4 thành 5, nên cộng 5 rồi chia lấy phần nguyên
long long lai = (tien + 5) / 10;
tien = tien + lai;
nam++;
}
cout << nam << "\n";
return 0;
}
Bình luận