2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Задача на комбинаторику
Сообщение28.12.2013, 12:48 
Вот условие: Генри Шейкер работает барменом в любимом баре Вито Маретти. Каждый вечер он радует гангстера новым коктейлем: водка с мартини, джин с апельсиновым соком, кефир с минералкой… За каждый новый коктейль Вито щедро расплачивается, а за повторение можно и пулю в лоб получить. Генри хочет знать, через сколько дней ему нужно будет покинуть город. Для этого посчитайте, сколько различных коктейлей Генри сможет сделать из N компонентов. Коктейлем считается смесь из двух и более напитков. Не разрешается использовать один напиток более одного раза в одном коктейле. Водка с мартини и мартини с водкой считаются разными коктейлями.
Вот мой код:
Код:
program combinatorics;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function factorial(N:integer):extended;
var
i:integer;
W:extended;
begin
W:=1;
for i:=1 to N do
  begin
    W:=W*i;
  end;
factorial:=W;
end;

function TNOP(N,k:integer):extended;        // The number of placements
var
W:extended;
begin
W:=(factorial(N))/(factorial(n-k));
TNOP:=W;
end;


var
k,N:integer;
W:extended;
begin
readln(N);
W:=0;
for k:=2 to N do
  begin
    W:=W+TNOP(N,k);
  end;
writeln(W);
readln;
end.


Как видите, Использовал формулу n!/(n-k)! , пробегая по всем k от 2 до n. "Проверятор" выдает ошибку результата.. подскажите, пожалуйста

 
 
 
 Re: Задача на комбинаторику
Сообщение28.12.2013, 13:25 
Аватара пользователя
LexiBender в сообщении #807111 писал(а):
Использовал формулу n!/(n-k)! , пробегая по всем k от 2 до n

Это неверно.

 
 
 
 Re: Задача на комбинаторику
Сообщение28.12.2013, 13:58 
Urnwestek в сообщении #807127 писал(а):
LexiBender в сообщении #807111 писал(а):
Использовал формулу n!/(n-k)! , пробегая по всем k от 2 до n

Это неверно.

Я уже понял ))) Вот и спрашиваю, какую надо применять?)

 
 
 
 Re: Задача на комбинаторику
Сообщение28.12.2013, 14:30 
Аватара пользователя
Это всё равно, что (все коктейли) - (коктейли только из одного напитка) - (коктейли только из нуля напитков). Попробуйте вывести в этой формуле все слагаемые самостоятельно.

 
 
 
 Re: Задача на комбинаторику
Сообщение28.12.2013, 14:31 
Аватара пользователя
LexiBender, если вы указываете условие задачи, то указывайте его полностью, со всеми условиями. Я имею ввиду вот это:
число N ($1 \leqslant N \leqslant 21$) — количество имеющихся у Генри напитков.
Думаю ваша формула верна, но, как вы думаете, что становится с extended при попытке засунуть в него $21!$. Почему вы решили использовать здесь вещественный тип переменной?

Результат
Выведите единственное целое число, равное искомому количеству коктейлей.

Что выведет вот эта ваша строка
writeln(W);
при больших значениях W?

 
 
 
 Re: Задача на комбинаторику
Сообщение28.12.2013, 14:34 
Аватара пользователя
А почему неправильно? По условию коктейлем считается набор из нескольких ингридиентов, в котором порядок имеет значение.
Например, для $n=3$ все возможные и различные коктейли это:
$123,132,213,231,312,121,12,21,13,31,23,32$
Их $6+6=12$ штук, что считается именно суммированием Ваших формул.
Возможно, ошибка именно в программе. Что-то не так суммируется или считается.
Не говорю уже о том, что Вы делаете ужасное число лишних действий. Считать Вашу формулу через два факториала очень неэффективно.

 
 
 
 Re: Задача на комбинаторику
Сообщение28.12.2013, 14:40 
Аватара пользователя
Да, снова слажал, про порядок не углядел и про себя додумал.
Надо чутка передохнуть от форума. (:

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group