Advertisement
qingquan

ATM(greedy)(ko hạn chế số lượng tờ tiền)

May 30th, 2015
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. #define MAX 20
  5. struct TIEN{
  6.      int soto;
  7.      int menhgia;
  8. };
  9. int a[]={500,200,100,50,20,10};
  10. int n = 6;
  11.  
  12. //số lượng tờ tiền của mỗi mệnh giá là không hạn chế.
  13. void ruttien(int a[], int n, int k, TIEN b[],int &nb)
  14. {
  15.     nb = 0;
  16.     int st,i = 0;
  17.     do{
  18.         if(k >= a[i]){
  19.             st = (int)k/a[i];
  20.             b[nb].soto = st;
  21.             b[nb++].menhgia = a[i];
  22.             k -= a[i]*st;
  23.            
  24.         }
  25.         i++;
  26.     }while(k>0 && i<n);
  27. }
  28. //hàm ko trả về số tờ, chỉ trả về dãy các tờ tiền
  29. bool tratien(int kq[], int &n, int k)
  30. {
  31.     int t[] = {500,200,100,50,20,10};
  32.     n = 0;
  33.     while (k>0) {
  34.         int i=0;
  35.         while (i<6 && t[i]>k) i++;//tìm tờ tiền có thể rút
  36.         if (i>=6) return false;
  37.         kq[n++] = t[i];     //thêm tờ tiền thứ i vào kq
  38.         k -= t[i];          //số tiền cần rút giảm đi
  39.     }
  40.     return true;
  41. }
  42.  
  43. int main()
  44. {
  45.     TIEN b[MAX];
  46.     int k,nb;
  47.     do{
  48.         cout <<"Nhap so tien can rut (boi so cua 10):";
  49.         cin >>k;
  50.     }while (k<=0 || k%10);
  51.     ruttien(a,n,k,b,nb);
  52.     cout<<"so to tien va menh gia can tra la:\n";
  53.     for(int i = 0; i < nb; i++)
  54.         cout<<b[i].soto<<" to "<<b[i].menhgia<<endl;
  55.  
  56.     system("pause");
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement