ma l'output deve essere una serie di triple di numeri? non lo hai specificato ma dall'esempio fai capire così..anche perchè non avrebbe senso altrimenti
ps: cmq parli di combinazioni senza ripetizione, non permutazioni
ecco il codice nel caso delle triple, non credo esista al mondo un algoritmo più compatto
codice:
#include<stdio.h>
// N elementi a gruppi di k = n! / (k!·(n - k)!)
int main()
{
int i,j,x,N=4;
for (i=1;i<=N;i++)for (j=i+1 ;j<=N;j++)for (x=j+1 ;x<=N;x++) printf("%d - %d - %d\n",i,j,x);
getchar();
}