function factorial(a:integer):integer;
var j,x:integer;
begin
x:=1;
for j:=1 to a do
x:=x*j;
result:=x;
end;
var sum,i,n,j,m:integer;
begin
i:=0;
sum:=0;
readln(m);
while sum<m do
begin
inc(i);
sum:=sum+factorial(2*i-1);
end;
writeln(sum,' ',i);
readln;
end.
Факториал
------------------------------------------------
Найти то минимальное количество слагаемых(сомножителей),при котором значения следующих сумм(произведений)превысят некоторое заданное М:
1!+3!+5!+..+(2*n-1)!
------------------------------------------------
З.ы. -я на первом курсе....в программировании боле менее соображаю,а вот чё такое факториал не знаю ваааще!!=(((школа у меня дибильная была,вот и всплывают такие дибильные проблемы как сейчас!
n!= 1*2*3*4*.....*(n-1)*n;
3!=1*2*3;
6!=1*2*3*4*5*6;
функцию получения факториала можно учучшить
function fact(value:integer): DOUBLE;
begin
if value=0 then result:=1
else result:=value*fact(value-1);
end;
0! = 1 (как и написал в функции ahilles)
только рекурсия здесь вроде незачем.
Код:
program Pr;
var
m, n, sum, ndx, fact: Integer;
begin
Write('Vveidite M : ');
ReadLn(m);
sum := 1;
n := 1;
fact := 1;
ndx := 1;
while sum < m do begin
Inc(n);
fact := fact*(ndx+1)*(ndx+2);
ndx := ndx + 2;
sum := sum + fact;
end;
WriteLn('n = ', n);
ReadLn;
end.
var
m, n, sum, ndx, fact: Integer;
begin
Write('Vveidite M : ');
ReadLn(m);
sum := 1;
n := 1;
fact := 1;
ndx := 1;
while sum < m do begin
Inc(n);
fact := fact*(ndx+1)*(ndx+2);
ndx := ndx + 2;
sum := sum + fact;
end;
WriteLn('n = ', n);
ReadLn;
end.
Код:
program pr;
var
m, n, sum, ndx, fact: Integer;
s, s2: string;
begin
Write('Vvedite M : ');
ReadLn(m);
sum := 1;
n := 1;
fact := 1;
ndx := 1;
Write('1');
s := '1!';
while sum < m do begin
Inc(n);
fact := fact*(ndx+1)*(ndx+2);
ndx := ndx + 2;
Str(ndx, s2);
s := s + ' + ' + s2 + '!';
sum := sum + fact;
Write('+', fact);
end;
WriteLn('>', m);
Str(m, s2);
s := s + ' > ' + s2;
WriteLn(s);
WriteLn('n = ', n);
ReadLn;
end.
var
m, n, sum, ndx, fact: Integer;
s, s2: string;
begin
Write('Vvedite M : ');
ReadLn(m);
sum := 1;
n := 1;
fact := 1;
ndx := 1;
Write('1');
s := '1!';
while sum < m do begin
Inc(n);
fact := fact*(ndx+1)*(ndx+2);
ndx := ndx + 2;
Str(ndx, s2);
s := s + ' + ' + s2 + '!';
sum := sum + fact;
Write('+', fact);
end;
WriteLn('>', m);
Str(m, s2);
s := s + ' > ' + s2;
WriteLn(s);
WriteLn('n = ', n);
ReadLn;
end.
Всем спасибо фсе свабодны!