Var v:array [0..100000] of integer; a:array [0..100,0..100000] of integer; m,p,k,w:integer;
procedure step(z,ma:integer);beginif z>0 then if a[z,ma]<>a[z-1,ma] then if a[z-1,ma]<a[z-1,ma-v[z]]+v[z] then begin step(z-1,ma-v[z]); write(v[z],' '); end else step(z-1,ma) else step(z-1,ma); end;
beginread(k);for p:=1 to k do begin read(v[p]); end;read(w);for p:=1 to k do begin for m:=1 to w do begin if m-v[p]>=0 then a[p,m]:=(max(a[p-1,m-v[p]]+v[p],a[p-1,m])) else a[p,m]:=a[p-1,m]; end; end;if a[k,w]=w then step(k,w) else writeln('No solution');end.
<span>Разбиваешь данное число на тетрады 011 010 111. Каждую тетраду заменяем двоичным числом, получаем ответ 327
</span><span>калькулятор в инженерном режиме встренный в виндовс тебе поможет :)</span>
Зрительная, так как только её нельзя написать..
Естественно неправильно, посмотри формулу круга для начала, сразу все понятно будет ;)
*намек на степени*
Это тема форм записи алгоритмов. Это форма блока. В начале записи каждого алгоритма есть слово "начало", а в конце "конец". Они обозначаются овалами. Ввод или вывод (что-то вроде "дано" и "ответ") записываются в параллелограме (согнутом прямоугольнике). В обычном прямоугольнике записывают действия. В ромбе — вопрос, на который можно ответить либо "да", либо "нет" и в зависимости от этого нужно выполнить те или иные действия. В этом упражнении всё просто делаешь по действиям. Например: ввод x, y — 5 и 25 (что дано в таблице). Дальше условие (вопрос): "x=y?" Отвечаем "нет" и пишем в таблицу ответ. После этого нас спрашивают: "x>y?" Снова нет. В таблицу пишем "нет". Действие: "y=y-x", то есть y теперь равен 25-5, что есть 20. Пишем в таблицу это число. Повторяем алгоритм несколько раз (там стрелка ведёт к началу алгоритма после этого, поэтому и повторяем), пока y не станет равен 5 (25-5-5-5-5),тогда на вопрос "x=y" ответим "да", пишем в таблицу значение x в итоге и готово. С нижней таблицей так же.