Cómo expresar Cnm en matemáticas en lenguaje C
Espero que esto ayude.
De /s/blog_64b236da0100vg33.html
#include lt;stdio.hgt;
#include lt;stdlib.hgt;
//De n elementos en la matriz a, obtiene la combinación de m elementos
bool zuhe(char a[], int n, int m)
{//p[x]=y obtiene The x -ésimo elemento es el yésimo elemento en un
índice int, i, *p;
p=(int*)malloc(sizeof(int)*m );
if(p==NULL)
{
return false;
}
index =0;
p[index]=0; //Obtener el primer elemento
while(true)
{
if(p[ index]gt;=n)
{//Llegar al final, retroceder
if(index==0)
{//Después de todo las situaciones han sido recuperadas, no hay manera de volver atrás
break;
}
index--;//Volver a la anterior
p[index]; //Reemplazar elemento
}
else if(index==m-1)
{// Obtenga suficiente salida
for(i=0;ilt;m;i)
{
printf("c",a[p[i]]
}
printf("\n");
p[índice]; //Reemplazar elemento
}
else
{//Obtener un elemento más
index
p[index]=p[index-1] 1;
}
}
gratis(p);
devuelve verdadero
}
//Realiza una disposición completa de la matriz a de n elementos
bool pailie(char a[], int n)
{//p[x]=y El elemento x-ésimo obtenido es el elemento y-ésimo en a
int i, j, temp, *p;
p=(int*)malloc(sizeof( int) *n);
if(p==NULL)
{
devuelve falso;
}
para(i=0;ilt;n;i)
{//Disposición inicial
p[i]=i;
}
while(true)
{//Bucle m =n! veces
// Genera un arreglo
for(i=0; ilt; n; i)
{
printf("c", a[p[i]]);
}
printf("\n");
//Desde la búsqueda hacia atrás y avance para ver si hay alguna situación en la que el siguiente número sea mayor que el número anterior. Si es así, se detendrá en la posición del último número.
for(i=n-1;igt;0 amp;amp; p[i]lt;p[i-1];i--);
//Si Si no hay una situación en la que el siguiente número sea mayor que el número anterior, significa que se ha alcanzado el último arreglo, return
if(i==0) break;
//Encuentra i desde el final, encuentra el número más pequeño mayor que p[i - 1], regístralo como j
for(j=n-1;jgt;i amp;amp; p[j ]lt;p[i-1] ;j--);
//Intercambia p[i-1] y p[j]
temp=p[i-1 ];p[i-1]= p[j];p[j]=temp;
//Invertir p[i] a p[n-1]
para (i=i, j=n- 1;ilt;j;i,j--)
{//Intercambiar p[c] y p[d]
temp= p[i];p[i] =p[j];p[j]=temp;
}
}
libre(p);
devuelve verdadero ;
}
int main()
{
char a[]=" ABCD";
zuhe(a, 4, 2); // combinación
pailie(a, 3); // disposición
return 0;
}