2009-02-02 6 views
0
  • un site de billetterie offre une réduction sur les billets «famille».
  • un billet de famille est de 2 adultes, 2 enfants.
  • La page de vente de billets permet à un utilisateur d'entrer n'importe quel nombre de billets pour adultes et enfants.

Comment puis-je trouver comment appliquer la remise de billets de famille, alors en charge tous les billets restants à leur coût correspondant (à savoir des billets pour adultes coûtent plus cher que les billets d'enfant)?Calculer le nombre de combinaisons 2xadult + 2xchild

Voici ce que j'ai jusqu'à présent (semble fonctionner, mais pas 100% confiance à ce sujet (php))

# Work out how many pairs of people there are 
$numAdultPairs = floor($oForm->adult/2); 
$numChildPairs = floor($oForm->child/2); 

# work out the number of matching pairs for child/adult 
if ($numAdultPairs > $numChildPairs) { 
    $numberOfFamilyTickets = $numAdultPairs - $numChildPairs; 
} else if ($numAdultPairs < $numChildPairs){ 
    $numberOfFamilyTickets = $numChildPairs - $numAdultPairs; 
} else if ($numAdultPairs == $numChildPairs) { 
    $numberOfFamilyTickets = $numAdultPairs; 
} 

# work out the remaining tickets required 
$remainingAdult = $oForm->adult % 2; 
$remainingChild = $oForm->child % 2; 

Répondre

2

I ne pense pas que votre approche fonctionne réellement. Supposons que vous avez 6 adultes et 4 enfants. Dans ce cas, votre premier if serait vrai et vous finiriez avec 3 - 2 = 1 billet de famille. Le résultat correct serait deux billets de famille et deux billets pour adultes, cependant.

Vous voulez le plus petit nombre de paires pour déterminer le nombre de tickets de famille. Essayez quelque chose comme ceci:

$numberOfFamilyTickets = min($numAdultPairs, $numChildPairs); 
$remainingAdult = $oForm->adult - 2 * $numberOfFamilyTickets; 
$remainingChild = $oForm->child - 2 * $numberOfFamilyTickets; 

En supposant que vous assurez-vous que $oForm->adult et $oForm->child sont non-négatifs.

2

Quelque chose le long de ces lignes (pseudo-code):

adultPairs = totalAdults/2 
childPairs = totalChildren/2 

familyPairs = min(adiltPairs, childPairs) 
adults = totalAdults - familyPairs * 2 
children = totalChildren - familyPairs * 2 
1

quelque chose comme ça peut-être ..

minfamilies = min (NumberOfAdults, NumberOfChildren)/2
RemaningAdults = NumberOfAdults - (minfamilies * 2)
RemainingChildren = NumberOfChildren - (minfamilies * 2)

EDIT: commentaire redondant. Les deux commentaires ci-dessus étaient bien justifiés, j'ai juste sauté dedans: D