Число размещений без повторений $$A^{k}_{n}$$ и число сочетаний без повторений $$C^{k}_{n}$$ подсчитывается по таким формулам: $$A^{k}_{n}=\frac{n!}{(n-k)!}=n(n-1)...(n-k+1);$$ $$C^{k}_{n}=\frac{n!}{k!(n-k)!}.$$ Составим программу:
Program RazmSoch;
uses crt;
var
n,k: integer;
function a (n, k: integer):integer;
{размещения}
var aa, i: integer;
begin
aa:=1;
for i:=n downto n-k+1 do
aa:=aa*i;
a:=aa;
end;
function c (n, k: integer): integer;
{сочетания}
var cc, i:integer;
begin
cc:=1;
if n<2*k then k:=n-k;
for i:=n downto n-k+1 do
cc:=cc*i;
for i:=1 to k do
cc:=cc div i;
c:=cc
end;
begin
writeln('n=');
readln(n);
writeln('k=');
readln(k);
writeln('a=', a(n, k));
writeln('c=', c(n, k));
end.
При вычислении функции размещений a переполнение может возникнуть только тогда, когда конечный результат превышает maxint, а при вычислении функции сочетание C перевыполнение может возникнуть и вследствии того, что промежуточный результат (числитель дроби) превышает maxint.
2012-06-25 • Просмотров [ 6609 ]
http://solution.3dn.ru/publ/zadachi/razmeshhenija/1-1-0-21