Из списка необходимо выбрать те товары, при которых достигается максимальная суммарная стоимость - C#

Узнай цену своей работы

Формулировка задачи:

Задача состоит в следующем: на складе есть набор товаров. Из этого списка необходимо выбрать те товары, при которых достигается максимальная суммарная стоимость. Но не превышая грузоподъемность авто. Задачу реализовал при помощи вложенных циклов, но кол-во товаров может быть разным. Поэтому нужно делать через рекурсию. Перечитал кучу тем, но так и не разобрался... Очень надеюсь на вашу помощь. На скрине тот самый список, решение правильное (зеленые грузим). []http://www.picshare.ru/uploads/140409/as0rWXRzW7.jpg[/] Данные из DGV считываю в массив "а" типа Tovar
        class Tovar
        {
            private int id;
            private string name;
            private string part;
            private int ves;
            private int price;
            private double ud;
 
            public Tovar(int Id, string Name, string Part, int Ves, int Price)
            {
                id = Id;
                name = Name;
                part = Part;
                ves = Ves;
                price = Price;
                ud = Price / Ves;
            }
 
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
 
            public string Part
            {
                get { return part; }
                set { part = value; }
            }
 
            public int Ves
            {
                get { return ves; }
                set { ves = value; }
            }
 
            public int Price
            {
                get { return price; }
                set { price = value; }
            }
 
            public int Id
            {
                get { return id; }
                set { id = value; }
            }
 
            public double Ud
            {
                get { return ud; }
                set { ud = value; }
            }
        }
Реализация без рекурсии
int max1 = 0;
            int ves = 0;
            string komb = "";
 
            for (int i = 0; i < a.Length; i++)
            {
                for (int i2 = 0; i2 < a.Length; i2++)
                {
                    for (int i3 = 0; i3 < a.Length; i3++)
                    {
 
                        /////// ИТД :)
 
                        if (((a[i].Price + a[i2].Price + a[i3].Price) > max1) && ((a[i].Ves + a[i2].Ves + a[i3].Ves) <= numericUpDown1.Value) &&
                            (i != i2) && (i != i3) && (i2 != i3))
                        {
                            max1 = a[i].Price + a[i2].Price + a[i3].Price;
                            ves = a[i].Ves + a[i2].Ves + a[i3].Ves;
                            komb = a[i].Id.ToString() + " " + a[i2].Id.ToString() + " " + a[i3].Id.ToString();
                        }
                    }
                    if (((a[i].Price + a[i2].Price) > max1) &&
                        ((a[i].Ves + a[i2].Ves) <= numericUpDown1.Value) && (i != i2))
                    {
                        max1 = a[i].Price + a[i2].Price;
                        ves = a[i].Ves + a[i2].Ves;
                        komb = a[i].Id.ToString() + " " + a[i2].Id.ToString();
                    }
                }
                if (max1 < a[i].Price && a[i].Ves <= numericUpDown1.Value)
                {
                    max1 = a[i].Price;
                    ves = a[i].Ves;
                    komb = a[i].Id.ToString();
                }
            }
Помогите пожалуйста разобраться!)

Решение задачи: «Из списка необходимо выбрать те товары, при которых достигается максимальная суммарная стоимость»

textual
Листинг программы
private void Form1_Load(object sender, EventArgs e)
        {
            dt = new DataTable();
            dt.Columns.Add("Код");
            dt.Columns.Add("Наименование");
            dt.Columns.Add("Партия");
            dt.Columns.Add("Вес");
            dt.Columns.Add("Стоимость");
            dt.Rows.Add(1, "Товар-1", "101", 10000, 700000);
            dt.Rows.Add(2, "Товар-2", "201", 12000, 540000);
            dt.Rows.Add(3, "Товар-3", "301", 14000, 840000);
            dt.Rows.Add(4, "Товар-3", "302", 4000, 240000);
            dt.Rows.Add(5, "Товар-4", "401", 8000, 640000);
            dt.Rows.Add(6, "Товар-5", "501", 16000, 880000);
            dt.Rows.Add(7, "Товар-6", "601", 24000, 2160000);
            dt.Rows.Add(8, "Товар-6", "602", 11000, 990000);
            dt.Rows.Add(9, "Товар-7", "701", 10000, 400000);
            dt.Rows.Add(10, "Товар-8", "801", 18000, 630000);
            dataGridView1.DataSource = dt;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.538 из 5
Похожие ответы