[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [obm-l] Algoritmo caso mais geral



B(1, 2, 3, ..., 10)
combinacao(N, n, k) imprime a N-ésima menor combinação
de k elementos do subconjunto formado pelos n
primeiros elementos de B.

#include <stdio.h>

int	B[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int	fatorial[] = {1, 1, 2, 6, 24, 120, 720, 5040,
40320, 362880, 3628800};

int	retira(int elemento, int n)
{
	int	ret, i;

	ret = B[elemento];

	for(i=elemento; i<n-1; i++)
		B[i] = B[i+1];

	return ret;
}

void	combinacao(int N, int n, int k)
{
	int	i, q;

	N = N * fatorial[n - k];

	for(i=0; i<k; i++)
	{
		q = (N % fatorial[n-i]) / fatorial[n-1-i];
		printf("%d", retira(q, n));
	}

	printf("\n");
}

int	main()
{
	int	a, i;

	while(1)
	{
		for(i=0; i<10; i++)
			B[i] = i + 1;

		scanf("%d", &a);
		combinacao(a, 8, 6);
	}
	return 0;
}

_______________________________________________________________________
Yahoo! Mail
O melhor e-mail gratuito da internet: 6MB de espaço, antivírus, acesso POP3, filtro contra spam. 
http://br.mail.yahoo.com/
=========================================================================
Instruções para entrar na lista, sair da lista e usar a lista em
http://www.mat.puc-rio.br/~nicolau/olimp/obm-l.html
=========================================================================