#include <stdlib.h>#include <stdio.h>// But :// Lister tous les arrangements de bits de longueur N contenant U// fois le digit 1 par ordre décroissant./*Exemple :en entrée ...4 2en sortie ...110010101001011001010011*/int N, U;// Fonction récursivevoid Etendre(char * tab, int nb0, int nb1){ int i; int size = nb0 + nb1; if(size == N){ // La chaine est pleine if(nb1 == U){ // Sureté, seulement si le nombre répond aux critères for(i=0; i<N; i++) putchar(tab[i]); putchar('\n'); } return; } // Si on peut encore caser des uns, on copie le tableau arrivant et on le complète avec un 1 if(nb1<U){ char * t1 = malloc((size+1)*sizeof(char)); strcpy (t1,tab,size); t1[nb0+nb1+1] = '1'; Etendre(t1, nb0, nb1+1); } // On copie le tableau arrivant dans t0 et on le complète avec un zero // (uniquement s'il le nombre de zero finale n'a pas été atteint) if(nb0<N-U){ char * t0 = malloc((size+1)*sizeof(char)); strcpy (t0,tab,size); t0[nb0+nb1+1] = '0'; Etendre(t0, nb0+1, nb1); }}void arrangements (int N, int U){ // On lance la récursion avec un tableau vide Etendre(NULL, 0, 0);}int main (void){ scanf ("%d%d", &N, &U); arrangements (N, U); return 0;}