Computer >> Máy Tính >  >> Lập trình >> lập trình C

Số tiền tối đa có thể được rút trong hai bước trong C


Chúng tôi nhận được hai tủ khóa, giả sử L1 và L2 có một số tiền dưới dạng tiền xu. L1 có A đồng xu và L2 có B số đồng xu trong đó. Chúng ta phải rút tiền hoặc xu từ tủ khóa sao cho số tiền rút ra là tối đa. Mỗi lần rút tiền từ bất kỳ tủ khóa nào, nó sẽ được thay thế bằng số xu ít hơn 1 so với lần đếm trước đó của nó. Nếu chúng ta rút tiền A từ L1 thì nó sẽ được thay thế bằng đồng A-1 và nếu chúng ta rút đồng B từ L2 thì nó sẽ được thay thế bằng đồng B-1. Nhiệm vụ là tối đa số tiền rút được trong hai bước. Điều đó có nghĩa là số tiền chỉ có thể được rút hai lần.

Đầu vào - L1 - 10, L2 - 11

Đầu ra −Số tiền tối đa có thể được rút trong hai bước - 21

Giải thích - Ở bước 1, chúng ta rút 11 xu từ L2, L2 sẽ được thay thế bằng 11-1 =10 xu.

Ở bước 2, cả L1 và L2 đều có 10 đồng tiền, vì vậy có thể rút từ bất kỳ đồng tiền nào và chúng tôi có 11 + 10 =21 đồng tiền đó là tối đa.

Đầu vào - L1-5, L2-5

Đầu ra −Số tiền tối đa có thể được rút trong hai bước - 10

Giải thích - Ở bước 1 chúng ta rút 5 xu từ L1, L1 sẽ được thay thế bằng 5-1 =4 xu.

Ở bước 2, cả L1 có 4 đồng và L2 có 5 đồng nên chúng ta lấy 5 đồng từ L2 và chúng ta có 5 + 5 =10 đồng là tối đa.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi có hai Tủ khóa L1 và L2 dưới dạng số nguyên với một số đồng xu.

  • Hàm maxMoney (int A, int B) nhận làm đầu vào số lượng xu trong tủ khóa.

  • Bên trong maxMoney (), chúng tôi sử dụng biến "money" để lưu trữ số tiền tối đa.

  • Ban đầu, tiền có giá trị từ A hoặc B, tùy theo giá trị nào lớn hơn. (Money =A> B? A:B)

  • So sánh giá trị của tiền với A hoặc B để kiểm tra số tiền của thùng chứa nào được rút ra.

  • Bây giờ thay thế thùng chứa đó bằng 1 ít hơn số tiền trước đó. (A-- hoặc B--)

  • Một lần nữa, tiền sẽ tăng thêm giá trị từ A hoặc B, tùy theo giá trị nào nhiều hơn. (tiền + =A> B? A:B)

    Nếu k nhỏ hơn thì k phần tử nhỏ nhất sẽ có tổng ít nhất -
  • Trong D1 lưu trữ abs ((tổng của cả mảng) - (2 * tổng của ít nhất k phần tử)). Hai lần vì tổng mảng cũng có các phần tử này.

    Nếu k lớn hơn thì k phần tử lớn nhất sẽ có tổng cao nhất -

  • Trong D2 lưu trữ abs ((tổng của cả mảng) - (2 * tổng của k phần tử cao nhất)). Hai lần vì tổng mảng cũng có các phần tử này.

  • So sánh D1 với D2 và lưu trữ giá trị lớn nhất trong maxD.

  • Kết quả là trả về maxD.

Ví dụ

Code:
#include <stdio.h>
#include <math.h>
// Function to return the maximum coins we can get
int maxMoney(int A, int B){
   //take coins
   int money=A>B?A:B;
   //refill the lockers with 1 less no.of coins
   if(money==A)
      A--;
   else
      B--;
   //withdraw again
   money+=A>B?A:B;
   return money;
}
// Driver code
int main(){
   int L1 = 8, L2 = 9;
   printf("Maximum money that can be withdrawn in two steps: %d" , maxMoney(L1, L2));
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Maximum money that can be withdrawn in two steps: 17