Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

что не так в этой задаче


Fors ©   (2003-01-10 13:51:00) 

Мастера подскажите, что не так в этой задаче. Дано натуральное число N. Можно ли его представить в виде суммы квадратов трех натуральных чисел?
ReadLn(N);
for i:= 1 to N-2 do
for j:=i to N-2 do
for k:=j to N-2 do
if (Sqr(i)+Sqr(j)+Sqr(k))=N then
WriteLn("yes")
else
WriteLn("no");
ReadLn
Результат какая та чепухаю Множество нет, нет, нет.......


Fors   (2003-01-10 15:06:00) [1]

Все ок ребята работает. Спасибо!!!!!


Slayer   (2003-01-10 14:29:00) [2]

Ну дык тагда прога Fors"a работает, просто надо убрать из цикла вывод "да" или "нет", а сделать её за циклами, а в цикл вделать переменную булеан, и если условие выполняестся, присваевать её значение True, циклы прерывать, а потом выводить "да" или "нет".


Alx2   (2003-01-10 14:27:00) [3]

>Fors (10.01.03 14:23
MBo уже все написал (10.01.03 14:01)


Slayer   (2003-01-10 14:26:00) [4]

А, птьфу блин, я и не заметил, что числа то разные, извеняюсь.


Alx2   (2003-01-10 14:24:00) [5]

>Slayer (10.01.03 14:20)
Нагнал с критерием целостности Frac(a)=0 => a - целое. Но в моем примере этот вариант не всегда будет корректен (можно подобрать такое n, что Frac(sqrt(n/3))<1E-10 но sqrt(n/3) - не целое (машинный нуль, едрить его:))
>почему мой не решает, ведь у меня тоже все работает.
Твой вариант пытается разложить в сумму трех одинаковых квадратов. А квадраты не обязаны быть одинаковыми


Fors   (2003-01-10 14:23:00) [6]

Да но эту задачу надо решить способом вложенных циклов


Slayer   (2003-01-10 14:20:00) [7]

Я непонял, чего ты нагнал, ведь то что ты паписал работает.
А почему мой не решает, ведь у меня тоже все работает.


Alx2   (2003-01-10 14:16:00) [8]

>Slayer (10.01.03 14:02)
Нагнал. Сорри :)
Но твой алгоритм не решает поставленную задачу


Alx2   (2003-01-10 14:14:00) [9]

>Slayer (10.01.03 14:02)
То, что у тебя написано вообще не требует цмклов.
Result := Frac(sqrt(n/3))<1E-10;


Slayer   (2003-01-10 14:02:00) [10]

Нафига стока циклов? У меня вот так работает.
var
n, i: integer;
f: boolean;
begin
f:= False;
n:= StrToInt(Edit1.Text);
for i:= 1 to n do
if n = (sqr(i)+sqr(i)+sqr(i)) then
f:= True;
if f = True then
showmessage("Yes")
else
showmessage("No");
end;


MBo   (2003-01-10 14:01:00) [11]

модификация этого же примитивного метода
procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,n,amax:integer;
begin
for n:=3 to 50 do begin
amax:=trunc(sqrt(n-1));
for i:=1 to amax do
for j:=i to amax do
for k:=j to amax do
if sqr(i)+sqr(j)+sqr(k)=n then
memo1.lines.add(format("%d: %d %d %d",[n,i,j,k]));
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо