Появилось время и не много размялся.
- Код: Выделить всё
#include <stdio.h>
#include <string.h>
char line[500],line1[500];
int pr[500];
void fc(int,int,int);
int rtrim(char * );
int main()
{
int j;
for(j=0; j<500; j++)
{
line1[j]='\0';
pr[j]=0;
}
if(fgets(line,100,stdin)==NULL)
{
fprintf(stdout,"No chars!\n");
return 1;
}
rtrim(line);
int g=strlen(line);
for(j=0; j<g; j++)fc(j,0,g);
return 0;
}
//рекурсивная процедура
void fc(int i, int c, int l)
{
int h;
line1[c]=line[i]; pr[i]=1; c++;
if(c==l)
{
//выводим перестановку....
fprintf(stdout,"%s \n", line1);
}
else
{
for(h=0; h<l; h++) if(!pr[h]) fc(h,c,l);
}
//выход из рекурсии - восстановление параметров....
c--; pr[i]=0;
}
//удаление правых лишних символов
int rtrim(char * s)
{
int l=strlen(s);
if(l==0)return 0;
while(s[l-1]<=32&&l>0)l--;
s[l]='\0';
return 0;
}
Запуск программы соответственно prog <input.txt >output.txt
В первой строке последовательность символов для перестановки.