Перейти к контенту

Факториал? из m по n


Рекомендуемые сообщения

Доброго времени суток.

Не поможите рещить вот такую проблему.

Имеется массив,например:

a = array("1","2","3","4" и т.д);

 

Необходимо сосчитать результат выполнения его по факториалу,

то есть количество уникальных вхождений скажем по 2 значения в данный массив.

Разбиваем вручную, получается: 12,13,14,23,24,34, всего 6 штук.

А как его разбить при помощи PHP?, ведь возможно будет необходимо узнать количество

уникальных вхождений из 20 по 5, причем мне известно, что таких вхождений будет 15504,

Пробовал через цикл, array_slice и т.д. никак не получается.

Но какой код необходимо сделать ни как не доходит,

чтобы ЭТИ САМИ вхождения вырисовывалиь на экране (автоматом).

С уважением, Евгений

Ссылка на комментарий
Поделиться на других сайтах

Жека К

к сожалению плохлохо помню теорию вероятности, на сколько я понял этот перебор из той оперы... можно математическую формулу привести, а то я ее не помню?

Ссылка на комментарий
Поделиться на других сайтах

n!/(k!*(n-k)!)

 

function factorial( $n ) {
if ( $n < 0 ) {
	return;
}

if ( $n == 0 ) {
	return ( 1 );
}

$result = $n * factorial( $n - 1 );

return ( $result );
}

function combination( $n, $k ) {
$fact1  = factorial( $n );
$fact2  = factorial( $k );
$fact3  = factorial( $n - $k );
$result = $fact1 / ( $fact2 * $fact3 );

return ( $result );
}

$m	  = 4;
$n	  = 2;
$result = combination( $m, $n );

echo( $result );

 

Попробуй. Код не тестировал - писал прямо здесь. Серьезных логических ошибок я не вижу. Если есть что-то, то в синтаксисе - парсер выдаст ошибку.

Изменено пользователем kovpas
Ссылка на комментарий
Поделиться на других сайтах

Ёлы-палы... Тебе надо, чтобы САМИ комбинации рисовались... Сейчас подумаю...
Ссылка на комментарий
Поделиться на других сайтах

Решение есть. Вечером выложу.

 

Добавлено:

 

Как и обещал - выкладываю.

 

function combinationEcho( /*Array*/ &$array, /*Integer*/$k, /*Integer*/ $from, /*String*/$prevStr ) {
if ( $k == 0 ) {
	echo( "<br>" );
	return;
}

$l = sizeof( $array );

if ( $from + $k > $l ) {
	echo( "<br>" );
	return;
}

for ( $i = $from; $i < $l; $i++ ) {
	if ( $i + $k > $l ) {
		return;
	}

	if ( $i != $from ) {
		echo( $prevStr );
	}

	echo( $array[$i] );

	combinationEcho( $array, $k - 1, $i + 1, $prevStr . $array[$i] );
}
}

$n	  = 2;
$array  = array( 1, 2, 3, 4 );

combinationEcho( $array, $n, 0, "" );

Изменено пользователем kovpas
Ссылка на комментарий
Поделиться на других сайтах

я тут подумал, $array можно и не передавать в функцию. Память только тратить.
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.