Если время выполнения не важно, то полный перебор. Любое число можно представить в виде суммы не более 9 кубов.
var i,j,k,n,m,p,r,s,u,v,nm,nmb: integer; a: array[0..400] of integer; b: array[1..9,1..3] of integer; begin write('число: '); readln(nm); r:=floor(power(nm,1/3))+1; a[0]:=0; // заполнение массива for i:=1 to r do a[i]:=i*i*i; // заполнение массива циклов // изначально 1 цикл b[1,1]:=1; b[1,2]:=0; b[1,3]:=r; nmb:=1; for i:=2 to 9 do begin b[i,1]:=0; b[i,2]:=0; b[ i,3]:=0; end; // полный перебор repeat for i:=b[1,1] to b[1,3] do for j:=b[2,1] to b[2,3] do for k:=b[3,1] to b[3,3] do for n:=b[4,1] to b[4,3] do for m:=b[5,1] to b[5,3] do for p:=b[6,1] to b[6,3] do for s:=b[7,1] to b[7,3] do for u:=b[8,1] to b[8,3] do for v:=b[9,1] to b[9,3] do if a[i]+a[j]+a[k]+a[n]+a[m]+a[p]+a[s]+a[u]+a[v]=nm then begin b[1,2]:=i; b[2,2]:=j; b[3,2]:=k; b[4,2]:=n; b[5,2]:=m; b[6,2]:=p; b[7,2]:=s; b[8,2]:=u; b[9,2]:=v; for nm:=1 to nmb do write(b[nm,2],' '); writeln; exit; end; inc(nmb); b[nmb,1]:=1; b[nmb,3]:=r; until false; end.
// PascalABC.NET 3.3, сборка 1600 от 23.12.2017 // Внимание! Если программа не работает, обновите версию!
function kolichestvo(c:array [,] of integer):integer; begin Result:=0; var n:=c.RowCount; for var i:=1 to n-1 do for var j:=n-i to n-1 do if c[i,j].IsEven then Result+=1 end;
function massiv:array[,] of integer; begin var n:=ReadInteger('Число строк/столбцов: '); Result:=MatrRandom(n,n,-99,99) end;
begin var s:=massiv; s.Println(4); Writeln(4*s.ColCount*'-'); var n:=massiv; n.Println(4); Writeln(4*n.ColCount*'-'); var m:=Sqr(kolichestvo(s)+kolichestvo(n)); Writeln('M=',m) end.
Пример Число строк/столбцов: 3 -77 -81 82 -30 -37 39 31 92 12
var i,j,k,n,m,p,r,s,u,v,nm,nmb: integer;
a: array[0..400] of integer;
b: array[1..9,1..3] of integer;
begin
write('число: '); readln(nm);
r:=floor(power(nm,1/3))+1;
a[0]:=0;
// заполнение массива
for i:=1 to r do a[i]:=i*i*i;
// заполнение массива циклов
// изначально 1 цикл
b[1,1]:=1; b[1,2]:=0; b[1,3]:=r;
nmb:=1;
for i:=2 to 9 do
begin
b[i,1]:=0; b[i,2]:=0; b[ i,3]:=0;
end;
// полный перебор
repeat
for i:=b[1,1] to b[1,3] do
for j:=b[2,1] to b[2,3] do
for k:=b[3,1] to b[3,3] do
for n:=b[4,1] to b[4,3] do
for m:=b[5,1] to b[5,3] do
for p:=b[6,1] to b[6,3] do
for s:=b[7,1] to b[7,3] do
for u:=b[8,1] to b[8,3] do
for v:=b[9,1] to b[9,3] do
if a[i]+a[j]+a[k]+a[n]+a[m]+a[p]+a[s]+a[u]+a[v]=nm then
begin
b[1,2]:=i; b[2,2]:=j; b[3,2]:=k; b[4,2]:=n; b[5,2]:=m;
b[6,2]:=p; b[7,2]:=s; b[8,2]:=u; b[9,2]:=v;
for nm:=1 to nmb do write(b[nm,2],' ');
writeln;
exit;
end;
inc(nmb);
b[nmb,1]:=1;
b[nmb,3]:=r;
until false;
end.
число: 2020
1 1 1 7 7 11
2020 = 1^3 + 1^3 + 1^3 + 7^3 + 7^3 + 11^3
// Внимание! Если программа не работает, обновите версию!
function kolichestvo(c:array [,] of integer):integer;
begin
Result:=0;
var n:=c.RowCount;
for var i:=1 to n-1 do
for var j:=n-i to n-1 do
if c[i,j].IsEven then Result+=1
end;
function massiv:array[,] of integer;
begin
var n:=ReadInteger('Число строк/столбцов: ');
Result:=MatrRandom(n,n,-99,99)
end;
begin
var s:=massiv; s.Println(4); Writeln(4*s.ColCount*'-');
var n:=massiv; n.Println(4); Writeln(4*n.ColCount*'-');
var m:=Sqr(kolichestvo(s)+kolichestvo(n));
Writeln('M=',m)
end.
Пример
Число строк/столбцов: 3
-77 -81 82
-30 -37 39
31 92 12
Число строк/столбцов: 6
66 9 -64 -53 13 -61
16 -72 -25 38 -19 21
40 29 38 77 -38 11
31 76 -83 -17 -58 1
-2 39 -63 84 -35 -42
-23 -75 -57 92 -14 -73
M=64