Такой вариант на простом паскале со стратегией жадность
var
n, s, i: integer;
x: array[1..100]of integer;
answer: string;
begin
readln(n);
for i := 1 to n do
read(x[i]);
readln(s);
answer := IntToStr(s) + ' = ';
for i := n downto 1 do
begin
answer := answer + IntToStr(s div x[i]) + '*' + IntToStr(x[i]);
s := s mod x[i];
if i > 1 then
answer := answer + ' + ';
end;
if s <> 0 then
writeln('NO')
else
writeln(answer);
end.
Более полный и правильный вариант решения, но и куда более сложный
//PascalABC.Net 3.1 сборка 1200
uses System.Collections.Generic;
uses System;
var
x := new List<integer>;
c := new List<Tuple<string, integer>>;
procedure getParcelling(sum, step: integer; coefficients: string; count: integer);
begin
if step >= x.Count then begin
if sum = 0 then c.Add((coefficients, count));
Exit;
end;
if step < 0 then step := 0;
for var j := 0 to (sum div x[step]) do
begin
var s := '';
if j > 0 then begin
if step > 0 then s += ' + ';
s += IntToStr(j) + '*' + IntToStr(x[step]);
end;
getParcelling(sum - x[step] * j, step + 1, coefficients + s, count + j);
end;
end;
begin
x := ReadArrInteger('x:', ReadInteger('n =')).ToList;
var sum := ReadInteger('sum =');
getParcelling(sum, 0, '', 0);
if c.Count = 0 then
writeln('No')
else begin
var min := c.Min(cc -> cc.Item2);
Println(c.Where(cc -> cc.Item2 = min));
end;
end.
Автоматический (через заданное количество времени), и по щелчку
Var i,j,k: integer;
<span> a: set of integer;
</span><span>begin
</span><span> i:=3; a:=[];
</span><span> repeat
</span><span> k:=0;
</span><span> for j:=2 to trunc(sqrt(i))+1 do
</span><span> if (i mod j)=0 then
</span><span> begin
</span><span> k:=1;
</span><span> break;
</span><span> end;
</span><span> if k=0 then a:=a+[i];
</span><span> i:=i+4;
</span><span> until i>256;
</span><span> writeln(a);
</span><span>end.
</span><span>83 79 167 163 251 71 67 151 239 59 139 227 47 223 43
131 127 211 31 23 199 19 107 103 191 11 7 3 179
</span><span>
</span>
Мы имеем две короткие стены, две длинные стены, две двери и три окна
- Мы имеем две короткие и две длинные стены.
- Из площади двух коротких стен нужно вычесть площадь одной двери и одного окна: 18 - 2,1 - 2 = 13,9 кв. м коротких стен нужно покрасить
- Из площади двух длинных стен нужно вычесть площадь одной двери и двух окон: 36 - 4,2 - 2 = 29,8 кв. м длинных стен нужно покрасить
- Общая площадь стен под покраску = 29,8 + 13,9 = 43,7 кв. м
- На 1 кв. м приходится 100 руб. => 43,7×100 = 4370 рублей потребуется на покраску стен