![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
что не так в этой задаче
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;