нашел решение задачи про перестановки оказывается все просто нужно в начале элементы отсортировать)
взято отсюда:
http://xpoint.ru/forums/programming/...ad/28625.xhtml
X++:
#include <stdio.h>
#include <string.h>
int main()
{
char str[20];
int n,k,t,y;
int ttt=1;
strcpy(str,"111223");
printf ("%s\n",str);
n=strlen(str)-1;
while(1)
{
k=n-1;
while ((str[k]>=str[k+1])&&(k>=0)) k--;
if (k<0) {return(0);}
t=k+1;
while ((t<n)&&(str[t+1]>str[k])) t++;
y=str[k];
str[k]=str[t];
str[t]=y;
t=0;
while (t<(int)((double)(n-k)/2.0))
{
y=str[n-t];
str[n-t]=str[k+1+t];
str[k+1+t]=y;
t++;
}
printf ("%s\n",str);
}
}