Найти количество каждого из заданных товаров при условии, что есть ограниченное кол-во денег
Стоит такая задача (которую нужно выполнить на C#, да и алгоритм работы увидеть):
Есть на руках 15000 рублей (число может быть абсолютно любым). Так же имеем определенное кол-во товаров (кол-во товаров и их цена тоже могут меняться, все зависит от юзера), например 4 шт. товаров, а именно -- Кирпич - 1.25 р., Цемент - 354,4 р., Шифер - 45 р., Щебень - 123,4 р.
Нужно рассчитать сколько можно купить товара на указанные деньги (15000 р.) при условии, что каждый из товаров должен быть в количестве не равном и меньшем нулю (ну и чтобы не возникало проблемы, что почти все деньги уходили в один товар и остальной товар был по 1 шт.), а минимальный остаток, который невозможно потратить ни на один из товаров записывался в отдельную переменную.
Ответы (1 шт):
В качестве примера сойдет т.к. у вас немного абстрактный вопрос и нет чёткой постановки задачи.
internal class Program
{
public static void Main(string[] args)
{
double cash;
ushort countProduct;
var products = new List<Product>();
Console.Write("Введите сумму бюджета на покупку товаров: ");
while (!double.TryParse(Console.ReadLine(), out cash) || cash <= 0)
{
Console.Write("Не удалось, введите снова сумму бюджета: ");
}
Console.Write("Введите кол-во различных товаров: ");
while (!ushort.TryParse(Console.ReadLine(), out countProduct) || countProduct == 0)
{
Console.Write("Не удалось, введите снова сколько товаров в списке: ");
}
while (countProduct > 0)
{
Console.Write("Введите название товара: ");
var nameProduct = Console.ReadLine();
Console.Write("Введите цену товара: ");
double priceProduct;
while (!double.TryParse(Console.ReadLine(), out priceProduct))
{
Console.Write("Не удалось, введите снова цену товара: ");
}
products.Add(new Product
{
Name = nameProduct,
Price = Math.Round(priceProduct, 2),
Count = 0
});
countProduct--;
}
Console.WriteLine("Список товаров и их цена: ");
foreach (var product in products)
{
Console.WriteLine($"{product.Name} - {product.Price} р.");
}
do
{
countProduct = 0;
foreach (var product in products.Where(product => cash >= product.Price))
{
cash -= product.Price;
product.Count++;
countProduct++;
}
} while (countProduct!=0);
if (products.Any(product => product.Count == 0))
{
Console.WriteLine("При таком бюджете, нет возможности купить каждый товар хотя бы 1 раз");
return;
}
foreach (var product in products)
{
Console.WriteLine($"{product.Name}: {product.Count} шт.");
}
var restMoney = Math.Round(cash, 2);
Console.WriteLine($"Остаток: {restMoney}");
}
}
public class Product
{
public string Name { get; set; }
public double Price { get; set; }
public ushort Count { get; set; }
}