Найти количество каждого из заданных товаров при условии, что есть ограниченное кол-во денег

Стоит такая задача (которую нужно выполнить на C#, да и алгоритм работы увидеть):

Есть на руках 15000 рублей (число может быть абсолютно любым). Так же имеем определенное кол-во товаров (кол-во товаров и их цена тоже могут меняться, все зависит от юзера), например 4 шт. товаров, а именно -- Кирпич - 1.25 р., Цемент - 354,4 р., Шифер - 45 р., Щебень - 123,4 р.

Нужно рассчитать сколько можно купить товара на указанные деньги (15000 р.) при условии, что каждый из товаров должен быть в количестве не равном и меньшем нулю (ну и чтобы не возникало проблемы, что почти все деньги уходили в один товар и остальной товар был по 1 шт.), а минимальный остаток, который невозможно потратить ни на один из товаров записывался в отдельную переменную.


Ответы (1 шт):

Автор решения: Happy_Sweetice

В качестве примера сойдет т.к. у вас немного абстрактный вопрос и нет чёткой постановки задачи.

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; }
}
→ Ссылка