1. Определим наибольшее натуральное число, куб которого не превышает 2019. ∛2019 ≈ 12.6; отбрасывая дробную часть, получаем 12. 2. Выпишем набор натуральных чисел от 1 до 12 и их кубов: 1-1, 2-8, 3-27, 4-64, 5-125, 6-216, 7-343, 8-512, 9-729, 10-1000, 11-1331, 12-1728 3. Определим при "жадного" алгоритма набор кубов, дающий в сумме 2019 (из 2019 поочередно вычитаем.максимально возможные кубы): 2019-1728=291, 291-216=75, 75-64=11, 11-8=3, а 3 - это три раза по 1. Получаются кубы чисел 12, 6, 4, 2, 1, 1, 1 - всего СЕМЬ чисел. 4. Попытаемся улучшить найденное решение, отбрасывая те, которые найдут семь и более чисел.
Если взять число 11³=1331, то 2019-1331=688 и нужно составить его из кубов не более, чем 5 чисел. 688-512=176, 176-125=51, 51-27=24 ... и слишком длинно. 688-2×343=2, 2-1=1, 1-1=0 - 4 числа. Улучшенное решение: 2019 = 11³+7³+7³+1³+1³
2. const n=5; var a:array[1..n,1..n] of integer; i,j:integer; begin Randomize; writeln('Исходный массив:'); for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=random(100); write(a[i,j]:4); end; writeln; end; for i:=1 to n do for j:=i+1 to n do a[i,j]:=0; writeln('Полученный массив:'); for i:=1 to n do begin for j:=1 to n do write(a[i,j]:4); writeln; end; end.
2. Выпишем набор натуральных чисел от 1 до 12 и их кубов:
1-1, 2-8, 3-27, 4-64, 5-125, 6-216, 7-343, 8-512, 9-729, 10-1000, 11-1331, 12-1728
3. Определим при "жадного" алгоритма набор кубов, дающий в сумме 2019 (из 2019 поочередно вычитаем.максимально возможные кубы):
2019-1728=291, 291-216=75, 75-64=11, 11-8=3, а 3 - это три раза по 1. Получаются кубы чисел 12, 6, 4, 2, 1, 1, 1 - всего СЕМЬ чисел.
4. Попытаемся улучшить найденное решение, отбрасывая те, которые найдут семь и более чисел.
Если взять число 11³=1331, то 2019-1331=688 и нужно составить его из кубов не более, чем 5 чисел.
688-512=176, 176-125=51, 51-27=24 ... и слишком длинно.
688-2×343=2, 2-1=1, 1-1=0 - 4 числа.
Улучшенное решение: 2019 = 11³+7³+7³+1³+1³
Лучшего решения нет.
const n=5;
begin
writeln('До:');
var a:=MatrRandom(n,n,-10,10); a.Println(5);
var b:=a.ElementsWithIndexes.Select(k->k[2]>k[1]?0:k[0]).ToArray;
writeln('После:');
a:=MatrGen(n,n,(i,j)->b[i*n+j]); a.Println(5);
end.
Пример:
До:
-7 3 8 -6 -5
-2 6 -1 -6 -8
5 7 2 -10 0
9 3 -8 5 -6
-4 1 1 0 -10
После:
-7 0 0 0 0
-2 6 0 0 0
5 7 2 0 0
9 3 -8 5 0
-4 1 1 0 -10
2.
const n=5;
var
a:array[1..n,1..n] of integer;
i,j:integer;
begin
Randomize;
writeln('Исходный массив:');
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(100);
write(a[i,j]:4);
end;
writeln;
end;
for i:=1 to n do
for j:=i+1 to n do a[i,j]:=0;
writeln('Полученный массив:');
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:4);
writeln;
end;
end.
Пример:
Исходный массив:
62 25 21 54 22
71 39 41 49 63
26 93 50 79 35
81 45 40 99 45
46 87 63 36 15
Полученный массив:
62 0 0 0 0
71 39 0 0 0
26 93 50 0 0
81 45 40 99 0
46 87 63 36 15