|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.01.2012, 16:00 | #1 |
Новичок
Джуниор
Регистрация: 10.01.2012
Сообщений: 1
|
Задача про покупки
этот код формирует все возможные комбинации по 3 и 4 покупки и считает сумму покупки со скидкой, но я не знаю как теперь из этих цифр составить минимальную сумму покупки. можешь там написать что-то левое, чтоб какие-то суммы считались, может, не заметит. код для составления всех возмиожных групп взят в нете. на листе в первый столбик вносишь цены, во второй названия товаров. на форме только одна кнопка, туда копируешь код без изменений
Dim k As Long Dim i As Integer Dim n As Integer Dim comb() As Integer Private Sub CommandButton1_Click() On Error GoTo error i = 1 Do While Cells(i, 1) <> "" i = i + 1 Loop i = i - 1 n = 3 If n > i Then MsgBox "Помилка! В мало товарів!", vbExclamation Or vbOKOnly, "Error" Exit Sub End If Number = fact(i) / (fact(n) * fact(i - n)) ReDim comb(Number - 1, n - 1) k = 1 Call groups(1, 1) p = 1 For t = 1 To Number For j = 1 To n Cells(p, 5) = Cells(comb(t - 1, j - 1), 1) Cells(p, 6) = Cells(comb(t - 1, j - 1), 2) p = p + 1 Next j Cells(p, 7).FormulaR1C1 = _ "=R[-3]C[-2]+R[-2]C[-2]+R[-1]C[-2]-MIN(R[-3]C[-2]:R[-1]C[-2])" p = p + 2 Next t n = 4 If n > i Then MsgBox "Помилка! В мало товарів!", vbExclamation Or vbOKOnly, "Error" GoTo r End If Number = fact(i) / (fact(n) * fact(i - n)) ReDim comb(Number - 1, n - 1) k = 1 Call groups(1, 1) p = 1 For t = 1 To Number For j = 1 To n Cells(p, 8) = Cells(comb(t - 1, j - 1), 1) Cells(p, 9) = Cells(comb(t - 1, j - 1), 2) p = p + 1 Next j Cells(p, 10).FormulaR1C1 = _ "=+R[-4]C[-2]+R[-3]C[-2]+R[-2]C[-2]+R[-1]C[-2]-MIN(R[-4]C[-2]:R[-1]C[-2])" p = p + 1 Next t r: Exit Sub error: MsgBox "Помилка!", vbExclamation Or vbOKOnly Err.Clear End Sub Public Function fact(x As Integer) As Double Dim l As Integer fact = 1 For l = 1 To x fact = fact * l Next l End Function Public Sub groups(a As Integer, b As Integer) Dim y As Integer Dim j As Integer If a = n + 1 Then k = k + 1 Else For y = b To i - n + a For j = k To fact(i) / (fact(i - n) * fact(n)) comb(j - 1, a - 1) = y Next j Call groups(a + 1, y + 1) Next y End If End Sub к сожалению, что делать дальше я не знаю, но если не придумаешь ничего лучше, то это хоть что-то |
11.01.2012, 16:37 | #2 |
Новичок
Джуниор
Регистрация: 11.01.2012
Сообщений: 1
|
Задача решается проще:
сначала формируйте сортировкой (пузырёк есть у Ориси) масив цен на подарки по убыванию. а потом на каждом этапе покупки считайте суму что сэкономите при использовании той или иной системы скидки. где экономия больше - то решение и применяется. в этом весь жадный алгоритм =) |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по делфи, задача покупки | astramorela | Помощь студентам | 9 | 25.01.2011 09:39 |
задача про множества | любаша | Общие вопросы Delphi | 2 | 16.09.2010 19:08 |
задача про муху | DarkMage | Общие вопросы C/C++ | 1 | 14.09.2010 20:59 |
Задача про деревья. | WhyBeNormal | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 21.12.2008 23:51 |