Есть n идентичных карт типа A, n типа B, n типа C и n типа D. Есть 4 человека, каждый из которых должен получить n карт. Сколько способов мы можем раздать карты?

Есть n идентичных карт типа A, n типа B, n типа C и n типа D. Есть 4 человека, каждый из которых должен получить n карт. Сколько способов мы можем раздать карты?
Anonim

Ответ:

Ниже приведена идея о том, как подойти к этому ответу:

Объяснение:

Я полагаю, что ответ на вопрос о методологии решения этой проблемы заключается в том, что комбинации с идентичными элементами в популяции (например, наличие # 4л # карты с # П # количество типов A, B, C и D) выходит за пределы возможности расчета формулы комбинации. Вместо этого, по словам доктора Матха на mathforum.org, вам в конечном итоге понадобится пара методов: распределение объектов по разным ячейкам и принцип включения-исключения.

Я прочитал этот пост (http://mathforum.org/library/drmath/view/56197.html), в котором непосредственно рассматривается вопрос о том, как вычислять этот тип проблемы снова и снова, и общий результат заключается в том, что пока ответ лежит где-то там, я не буду пытаться дать ответ здесь. Я надеюсь, что один из наших опытных математических гуру может вмешаться и дать вам лучший ответ.

Ответ:

Программа подсчета в C дает следующие результаты:

Объяснение:

#включают

int main ()

{

int n, i, j, k, t, br, br2, numcomb;

int comb 5000 4;

длинный счет;

для (п = 1; п <= 20; п ++)

{

число = 0;

для (i = 0; i <= n; i ++) для (j = 0; j <= n-i; j ++) для (k = 0; k <= n-i-j; k ++)

{

comb numcomb 0 = i;

comb numcomb 1 = j;

comb numcomb 2 = k;

comb numcomb 3 = n-i-j-k;

numcomb ++;

}

count = 0;

для (я = 0; я<>

{

для (J = 0, J<>

{

br = 0;

для (t = 0; t <4; t ++) if (comb i t + comb j t> n) br = 1;

если (! br)

{

для (к = 0; K<>

{

br2 = 0;

для (t = 0; t <4; t ++) if (comb i t + comb j t + comb k t> n) br2 = 1;

если (! br2)

{

подсчитывать ++;

}

}

}

}

}

printf (" nCount для n =% d:% ld.", n, count);

}

Е (" п");

Возвращение (0);

}