![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Дано натуральное число n. Выяснить, можно ли представить n! в виде произведения трех последовательных целых чисел.
Вот мой код: Код:
uses
SysUtils; var n,i,f:integer; p:boolean;
begin
writeln('vvedite n');
readln(n);
f:=1;
for i:=1 to n do
f:=f*i;
p:=false;
for i:=1 to n do
if i*(i+1)*(i+2)=f then
begin
p:=true;
writeln(i,'*',i+1,'*',i+2,'=',f);
end;
if (p=false) then writeln('Ne vozmozno');
readln;
end.Что тут не так?.. Заранее благодарен ![]() |
|
#2
|
|||
|
|||
|
ну потому что если ввести 6 то f будет равна 720,
а в условии for i:=1 to n do begin if i*(i+1)*(i+2)=f then вот эта вот строчка i*(i+1)*(i+2) после шести раз будет 336 равна а не 720,так что в программе какбы всё верно,гдето условие,формулу, не правильно записал просто |
|
#3
|
|||
|
|||
|
ошибка в этой строчке
Код:
for i:=1 to n do Код:
i*(i+1)*(i+2) Значит нужно изменить конечное значение счетчика, чтобы проверял не до n... ну например хотя до 20... или 30... или 100... напрашивается вопрос: Каким должно быть конечное значение??? Последний раз редактировалось Row, 17.04.2011 в 13:21. |
|
#4
|
||||
|
||||
|
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
n,i,f:integer; p:boolean;
begin
writeln('vvedite n');
readln(n);
f:=1;
for i:=1 to n do
f:=f*i;
p:=false;
i:=1;
while (i*(i+1)*(i+2))<=f do
begin
if i*(i+1)*(i+2)=f then
begin
p:=true;
writeln(i,'*',i+1,'*',i+2,'=',f);
end;
Inc(i);
end;
if (p=false) then writeln('Ne vozmozno');
readln;
end. |
|
#5
|
|||
|
|||
|
блин, вот я осел))
зациклился на счетчике и все, про while не подумал даже)) спасибо большое)) |