Из списка необходимо выбрать те товары, при которых достигается максимальная суммарная стоимость - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д