ecrire un programe calcul le prix d'une commande de macarons. Chque macaron a le meme prix unitaire(donne en input) chaque macaron a une saveur spécifique. Il existe au max 5 saveur différents parmi tous les macarons. Une commande comprend un ou plusieurs lots. Un lot peut contenir jusqua 5 macarons mais ne peut pas contenir des macarons de meme saveur. cherche toujours a remplir les lots de 5 au maximum. L'ordre des macaron dans un lot est sans incidence, et l'ordre des lots entre eux est également sans incidence. reduction en fonction du nombre de saveur diff par lot: 2 saveurs diff dans lot = -10% sur le prix du lot; 3 saveurs diff = -20%; 4 saveur diff = -30%; 5 saveurs diff = -40% sur le prix du lot. Implementer function public static int ComputeTotalPrice(float unitPrice, string[] macarons) , prend en parametres unitPrice, le prix d'un macaron, et macarons est un table de chaines de carateres representant les differentes saveurs. Retourne le prix total de la commande sous forme d'un entier arrondi à l'entier inférieur
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static int ComputeTotalPrice(float unitPrice, string[] macarons)
{
// Comptage des saveurs de macarons
Dictionary<string, int> flavorCount = new Dictionary<string, int>();
foreach (string macaron in macarons)
{
if (flavorCount.ContainsKey(macaron))
flavorCount[macaron]++;
else
flavorCount[macaron] = 1;
}
// Créer des lots en maximisant le nombre de saveurs distinctes
List<List<string>> lots = new List<List<string>>();
// Continuer à remplir les lots tant qu'il reste des macarons
while (flavorCount.Values.Any(count => count > 0))
{
List<string> currentLot = new List<string>();
// Essayer de remplir le lot avec des saveurs différentes
foreach (var flavor in flavorCount.Keys.ToList())
{
if (currentLot.Count < 5 && flavorCount[flavor] > 0)
{
currentLot.Add(flavor);
flavorCount[flavor]--;
}
if (currentLot.Count == 5) break; // Un lot ne peut contenir plus de 5 macarons
}
lots.Add(currentLot); // Ajouter le lot rempli à la liste des lots
}
// Calculer le prix total
float totalPrice = 0;
foreach (var lot in lots)
{
int uniqueFlavorsCount = lot.Distinct().Count(); // Nombre de saveurs uniques dans le lot
float lotPrice = unitPrice * lot.Count; // Prix sans réduction pour le lot
// Appliquer la réduction en fonction du nombre de saveurs différentes dans le lot
if (uniqueFlavorsCount == 2)
lotPrice *= 0.9f; // 10% de réduction
else if (uniqueFlavorsCount == 3)
lotPrice *= 0.8f; // 20% de réduction
else if (uniqueFlavorsCount == 4)
lotPrice *= 0.7f; // 30% de réduction
else if (uniqueFlavorsCount == 5)
lotPrice *= 0.6f; // 40% de réduction
totalPrice += lotPrice;
}
// Retourner le prix total arrondi à l'entier inférieur
return (int)Math.Floor(totalPrice);
}
public static void Main()
{
// Exemple d'utilisation
float unitPrice = 2.5f; // Prix unitaire d'un macaron
string[] macarons = { "vanilla", "chocolate", "strawberry", "vanilla", "chocolate", "raspberry", "lemon", "vanilla" };
int totalPrice = ComputeTotalPrice(unitPrice, macarons);
Console.WriteLine($"Le prix total de la commande est : {totalPrice} €");
}
}
Aucun commentaire:
Enregistrer un commentaire