[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
=========================================================================