Имя: Пароль:
1C
 
Подскажите алгоритм
Ø
0 xeex
 
13.01.06
09:52
Дан числовой массив из N элементов,
дано итоговое число Х.
Как составить алгоритм, определяющий суммой каких элементов массива является итоговое число?
1 rio1c77
 
13.01.06
10:07
Вариантов составления элементов скорее всего море
думать неохота много, но я бы посмотрел в сторону
1) сортировки массива
2) составления вспомогательного массива всевозможных частичных сумм элементов, меньших X
После этого что-то типа перебора с использованием второго массива
2 Пим Сибирский
 
13.01.06
10:08
На вскидку:
Алгоритм рекурсивный. Складываеш элементы:
1+2,1+2+3,1+2+3,...,1+2+3+...+N,
потом
1+3, 1+3+4, 1+3+4+5, ... , 1+3+4+5+...+N
... ... ...
1+N
3 Пим Сибирский
 
13.01.06
10:11
2 не подойдет. Вижу косяк. Но что-то в этом духе. Думай сам.
4 2Green
 
13.01.06
10:13
 какой тут алгоритм?
 Х = min(N) + (N - min(N));
 если второе слогаемое в массиве не содержится, пытаемся его составить из элементов массива (всех или оставшихся - не понятно). если так и не подбёрём, то можно взять первым следующий элемент и т.д....
5 Пим Сибирский
 
13.01.06
10:18
Полный перебор всевозможных сумм и проверка на соответствие с данной суммой. Кстати, данная сумма может оказаться и не способной быть составлена из данного массива. Гы.
6 xeex
 
13.01.06
13:07
Обязательное условие: итоговая сумма может быть составлена из элементов массива
7 xeex
 
13.01.06
13:11
Обязательное условие: итоговая сумма может быть составлена из элементов массива
8 NS
 
13.01.06
13:13
http://forum.mista.ru/topic.php?id=129178&section=math
9 бутерброд с красной
 
13.01.06
13:14
а где ОФФ???
10 xeex
 
13.01.06
13:20
Приношу извинения,
ОФФ
11 NS
 
13.01.06
13:22
Функция Рюкзак(а[],Сумма,количество,знач нач=0)
     Если Сумма=0 Тогда
   возврат 0; // нашли точное соответствие
     ИначеЕсли Сумма<0 Тогда
         возврат 1; // перебор
     КонецЕсли;
     Если нач=количество Тогда
         возврат 1; // пробежали до конца
     КонецЕсли;
     нач=нач+1;
     Если Рюкзак(а,Сумма-а[нач],количество,нач)=0 Тогда
   сообщить(а[нач]);
         возврат 0;
   Иначеесли Рюкзак(а,Сумма,количество,нач)=0 Тогда
   возврат 0;
     КонецЕсли;
     возврат 1;
КонецФункции
Процедура Сформировать()
      перем а[4];
   а[1]=5;
   а[2]=7;
   а[3]=9;
   а[4]=10;
   Сумма=22;
   КоличествоЭлементов=4;
   Рюкзак(а,Сумма,КоличествоЭлементов);
КонецПроцедуры
12 BlinOFF
 
13.01.06
14:10
Если еще актуально - пиши в аську (33534118).. недавно такой алгоритм применял..
13 NS
 
13.01.06
14:11
(12) И он лучше, чем код в (11)?
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.