Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2012, 16:00   #1
wonder55
Новичок
Джуниор
 
Регистрация: 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

к сожалению, что делать дальше я не знаю, но если не придумаешь ничего лучше, то это хоть что-то
wonder55 вне форума Ответить с цитированием
Старый 11.01.2012, 16:37   #2
cyber2-1
Новичок
Джуниор
 
Регистрация: 11.01.2012
Сообщений: 1
По умолчанию

Задача решается проще:
сначала формируйте сортировкой (пузырёк есть у Ориси) масив цен на подарки по убыванию.
а потом на каждом этапе покупки считайте суму что сэкономите при использовании той или иной системы скидки. где экономия больше - то решение и применяется. в этом весь жадный алгоритм =)
cyber2-1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по делфи, задача покупки 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