Вот задачка, как зделать в масивах я примерно знаю, но мне нада её решыть с помощью множыств ( на украинском "множин"), с етим методом я никак немогу разобратся. На форуме вродебы ничего похожего ненаходил.
В порядке спадания напечатать все целые числа из диапазона 1..100 которые можно подати в виде sqr(n)+2*sqr(k) , где n,k целые числа.
var
i,n,k : Integer;
a : Set of Byte;
begin
a:=[];
readln(n,k);
for i:=1 to 100 do
begin
if i=sqr(n)+2*sqr(k) then
include(a,i);
end;
for i:=1 to 100 do
begin
if i in a then
Write(i,' ');
end;
readln;
end.
Не совсем так.. Выражение "числа можно представить в виде" означет, что нужно найти все n и k, удовлетворяющие условию. Так что как-то примерно так:
var
i,n,k : Integer;
a : Set of Byte;
begin
a:=[];
for i:=1 to 100 do for n:=0 to 100 do for k:=1 to 100 do
if i=sqr(n)+2*sqr(k) then include(a,i);
for i:=100 downto 100 do if i in a then Write(i,' ');
readln;
end.
Непонятно только, зачем делать заведомо лишнюю работу: как только n или k превысит 10, сумма n2+2*k2 превысит 100, так что циклы по N и K можно ограничить 10-ю... А по i вообще убрать:
for n := 0 to 10 do
for k := 1 to 10 do begin
i := n*n + 2*k*k;
if i <= 100 then include(a, i);
end;
for i := 100 downto 1 do if i in a then Write(i: 4);