Maison  >  Article  >  développement back-end  >  En C, le montant maximum pouvant être retiré en deux étapes

En C, le montant maximum pouvant être retiré en deux étapes

WBOY
WBOYavant
2023-09-22 08:05:171344parcourir

En C, le montant maximum pouvant être retiré en deux étapes

Nous avons deux casiers appelés L1 et L2 avec quelques pièces de monnaie à l'intérieur. L1 a des pièces A et L2 a des pièces B. Il faut retirer les pièces du casier pour maximiser le montant retiré. Chaque fois qu'une pièce est retirée d'un casier, elle est remplacée par le montant précédent moins 1 pièce. Si nous prenons des pièces A de L1, alors elles seront remplacées par des pièces A-1, et si nous prenons des pièces B de L2, elles seront remplacées par des pièces B-1. La tâche consiste à maximiser le montant retiré en deux étapes. Cela signifie que la pièce ne peut être retirée que deux fois.

Entrée - L1 - 10, L2 - 11

Sortie - Montant maximum pouvant être retiré en deux étapes - 21

Explication - Dans la première étape, nous retirons 11 des pièces L2, L2 sera remplacé par 11-1=10 pièces.

Dans la deuxième étape, L1 et L2 ont 10 pièces, donc elles peuvent être prises dans l'une ou l'autre, nous avons 11+10=21 pièces, ce qui est le maximum.

Entrée - L1-5, L2-5

Sortie - Le montant maximum pouvant être retiré en deux étapes - 10

Explication - Dans la première étape, nous retirons 5 des pièces L1, L1 sera remplacé par 5-1=4 pièces.

Dans la deuxième étape, L1 a 4 pièces et L2 a 5 pièces, donc on prend 5 pièces de L2 et on a 5+5=10 pièces, ce qui est le maximum.

La méthode utilisée par le programme suivant est la suivante

  • Nous avons deux casiers entiers L1 et L2, qui contiennent des pièces.

  • La fonction maxMoney(int A, int B) prend le nombre de pièces dans le casier comme entrée.

  • Dans la fonction maxMoney(), nous utilisons la variable 'money' pour stocker le montant maximum.

  • Initialement, la valeur de l'argent vient du plus grand de A ou B. (money=A>B?A:B)

  • Comparez la valeur de l'argent avec A ou B pour déterminer quelle pièce de monnaie du conteneur a été retirée.

  • Remplacez maintenant le récipient par le montant précédent moins 1 pièce. (A-- ou B--)

  • Ajoutez à nouveau la valeur de l'argent au plus grand de A ou B. (money+=A>B?A:B)

    Si k est petit, la somme des plus petits k éléments est la plus petite -
  • Stockage abs((somme du tableau entier) - (la somme des plus petits k éléments ) dans D1 Deux fois la somme )). Deux fois car la somme du tableau contient également ces éléments.

    Si k est plus grand, la somme des k éléments les plus grands est la plus grande -

  • Stockez les abdos dans D2 ((somme de l'ensemble du tableau) - (deux fois la somme des k éléments les plus grands)). la somme du tableau contient également ces éléments.

  • Comparez D1 avec D2 et stockez la valeur maximale dans maxD.

  • Renvoyer maxD comme résultat.

Exemple

Démo en direct

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;
}

Output

Si nous exécutons le code ci-dessus, il générera la sortie suivante −

Maximum money that can be withdrawn in two steps: 17

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer