Ủa đâu anh. Thì ở trên em ghi ko có n- nhưng trong vòng lập ở đằng sau em vẫn để
VD như chạy từ 500k
Thì t1= a*500k
chạy b(200k)
Thì chạy từ 0 cho đến <=n-t1 rồi đó… Là vẫn trừ rồi
Hỏi thuật toán bài toán tìm tổng số cách đổi tiền có thể được
giờ mới thấy cái này duyệt trâu 5 vòng for cũng được
hic tại bí quá mới làm cách đó… Chứ làm là biết chắc là lỗi thời gian xiền :((
break sớm thì ko có lỗi thời gian đâu
cho n = 876 thử coi nó có ra 297933 hay ra số nào?
ý chạy thử thấy t2 t3 t4 tính sai đó. t2 = t1 + bm200, t3 = t2 + cm100, v.v… chứ
ra 297933 đúng anh ơi!
sửa lại mấy cái t cho đúng nữa là ra lẹ thôi
Cái t ở trên thì ở dưới em vẫn chạy đến n-t(ở trên rồi mà anh nhỉ??) hic…
t2 t3 t4 t5 có nghĩa là gì? Tính t2 = am500 - bm200; phép trừ có đúng ko ??
Dạng như đầu tiên là chạy a(biến của 500k)
Thì biến b(của 200k) sẽ chạy đến (số tiền ban đầu - a*500k)/200k
Em hiểu như vậy ko biết đúng ko nhỉ?? Theo lời bác qloved ở trên ấy
đúng rồi, vậy tính t2 t3 t4 lại cho đúng đi
để động não tiếp. Hic
t1 là tổng số tiền trả bằng tờ 500k
t2 là tổng số tiền trả bằng tờ 500k, 200k
t3 là tổng số tiền trả bằng tờ 500k, 200k, 100k
t4 là tổng số tiền trả bằng tờ 500k, 200k, 100k. 50k
tổng thì tính tổng chứ sao lại trừ ~.~
t4 = a*m500 - b*m200 - c*m100 - d*m50;
trừ gì ở đây trời ~.~
oh sệt! Đã hiểu ra vấn đề ở đây Cảm ơn anh rất nhiều!
viết lại cho đẹp nè, đâu cần break hay dem++ tá lả, cần 1 cái trong cùng là được rồi @_@ Code kia chạy đúng, đừng copy code này.
int SoCach(int n)
{
n /= 10000; //n là bội của 10000 nên chia bớt
int count = 0;
for (int a = 0; a <= n; a += 50)
for (int b = a; b <= n; b += 20)
for (int c = b; c <= n; c += 10)
for (int d = c; d <= n; d += 5)
for (int e = d; e <= n; e += 2)
count += e == n;
return count;
}
Nếu suy nghĩ đơn giản thì 5 loại tiền ứng với 5 vòng while
while (50 * tien500 ≤ n/10000)
{
int tong1 = 50 * tien500;
while (tong1 + 200k * tien200 ≤ n/10000)
{
int tong2 = tong1 + 20 * tien200;
while (tong2 + 10 * tien100 ≤ n/10000)
{
int tong3 = tong2 + 10 * tien100;
while (tong3 + 5 * tien50 ≤ n/10000)
{
int tong4 = tong3 + 5 * tien50;
while (tong4 + 2 * tien20 ≤ n/10000)
{
int tong5 = tong4 + 2 * tien20;
if (tong5 = n/10000)
{
blablabla...
}
tien20++;
}
tien50++;
}
tien100++;
}
tien200++;
}
tien500++;
}
Thì theo em while vs for cũng như nhau mà nhỉ anh?? Lúc đầu em suy nghĩ max đơn giản
5 dòng for chạy 1 lần gần 2p
Cũng dùng 5 vòng while với winform à O_o