Либо я слеп, либо я туп, но в упор ничего не нашел, что мне более менее помогло бы
volvo
1.05.2005 18:00
Deluxweb, что-то в задании настораживает... В частности - вот это:
Цитата(Deluxweb @ 1.05.05 12:14)
надо вывести в файл F2 все возможные полностью или частично удовлетворяющие варианты в границах суммы S
Что значит "частично удовлетворяющий вариант"? Насколько я понимаю, "полностью удовлетворяющим вариантом" можно считать тот, при котором сумма денег S больше чем общая стоимость выбранного товара. Объясните мне в таком случае, что значит "частично"...
Deluxweb
1.05.2005 18:10
Цитата(volvo @ 1.05.05 13:00)
Deluxweb, что-то в задании настораживает... В частности - вот это:
Что значит "частично удовлетворяющий вариант"? Насколько я понимаю, "полностью удовлетворяющим вариантом" можно считать тот, при котором сумма денег S больше чем общая стоимость выбранного товара. Объясните мне в таком случае, что значит "частично"...
Согласен кривовато звучит... Полностью это имелось в виду товар купленный ровно на сумму S а частично - на сумму меньше чем сумма S но так как там стоит ИЛИ все сводиться к тому чтобы найти все варианты при которых цена покупки ровна или меньше суммы S
volvo
1.05.2005 22:43
Цитата(Deluxweb @ 1.05.05 14:10)
Согласен кривовато звучит... Полностью это имелось в виду товар купленный ровно на сумму S а частично - на сумму меньше чем сумма S но так как там стоит ИЛИ все сводиться к тому чтобы найти все варианты при которых цена покупки ровна или меньше суммы S
Тогда вот так (только учти, что это - совершенно неоптимизировано, и при бОльших значениях будет выполняться ОЧЕНЬ долго):
const n = 5; s: longint = 150; { сумма на руках у пользователя } type arrType = array[1 .. n] of integer; const { исходные значения } count: arrType = (1, 1, 3, 7, 8); price: arrType = (8, 3, 5, 6, 9);
var found, total: longint;
{ подсчет суммы, необходимой в каждый момент } function get_sum: longint; var s: longint; i: integer; begin s := 0; for i := 1 to n do s := s + count[i] * price[i]; get_sum := s; inc(total); end;
{ здесь будет вывод в файл } procedure print; var i: integer; begin for i := 1 to n do { P - номер товара, A - его количество } write('p:', i:2, ' a:', count[i]:3, '':2); writeln; inc(found); end;
{ а вот и "сердце" программы } procedure main(k: integer); var i, T: integer; begin if k = n then begin T := count[k]; for i := T downto 0 do begin count[k] := i; if get_sum <= s then print; end; count[k] := T; end else begin T := count[k]; for i := T downto 0 do begin count[k] := i; main(k + 1) end; count[k] := T end end;
begin found := 0; total := 0; main(1);
{ это для статистики (сколько перебрали, и сколько подошло) } writeln('found/total = ', found, '/', total, '=', found/total:10:5); end.
Просто напросто тебе придется читать файл с данными, и записывать в массив count количества товаров, в массив price их цены, и присваивать количество переменной N, алгоритм будет работать (но очень долго )
Guest
2.05.2005 2:05
Цитата(volvo @ 1.05.05 18:43)
Тогда вот так (только учти, что это - совершенно неоптимизировано, и при бОльших значениях будет выполняться ОЧЕНЬ долго):
Большоое спасибо... буду разбираться
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.