Red de conocimiento informático - Aprendizaje de código fuente - Cómo expresar Cnm en matemáticas en lenguaje C

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;

}