Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задачка из темы множества

Автор: Markson 22.04.2009 3:23

Вот задачка, как зделать в масивах я примерно знаю, но мне нада её решыть с помощью множыств ( на украинском "множин"), с етим методом я никак немогу разобратся. На форуме вродебы ничего похожего ненаходил.


В порядке спадания напечатать все целые числа из диапазона 1..100 которые можно подати в виде sqr(n)+2*sqr(k) , где n,k целые числа.

Автор: Ozzя 22.04.2009 12:59

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.

Не знаю что такое "спадания " сам реализуешь

Автор: Гость 22.04.2009 15:06

Не совсем так.. Выражение "числа можно представить в виде" означет, что нужно найти все 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.

Цитата(Ozzя @ 22.04.2009 8:59) *
Не знаю что такое "спадания " сам реализуешь
Думаю, это значит в порядке убывания (сделал)

Автор: volvo 22.04.2009 15:17

Непонятно только, зачем делать заведомо лишнюю работу: как только 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);

Автор: Lapp 23.04.2009 7:59

Цитата(volvo @ 22.04.2009 12:17) *
Непонятно только, зачем делать заведомо лишнюю работу: как только n или k превысит 10, сумма n2+2*k2 превысит 100, так что циклы по N и K можно ограничить 10-ю... А по i вообще убрать:
Совершенно согласен, я явно перестраховался smile.gif. Но, volvo, ты зря выкинул ноль из второго цикла - формула несимметричная относительно n и k. Число 25, например, удовлетворяет условию (52+2*02), а твое решение его не найдет. На n и k не накладывается никаких ограничений, кроме целости, так что по идее в цикл должны войти и отрицательные числа - но их мы отбрасываем, поскольку их квадраты равны квадратам положительных. Ноль же отбросить нельзя smile.gif.