Cod sursa(job #110679)
#include<stdio.h>
FILE *f=fopen("ordine.in","r"), *g=fopen("ordine.out","w");
long int s,fr[26],j,ok;
char c[26],x;
void afisare( int i,long int fr[], long int &s);
void atribuire( char c[]);
int main()
{ atribuire(c);
while(!(feof(f))){ fscanf(f,"%c",&x);
for(j=1;j<=25;j++) if(x==c[j]){ fr[j]++; s++; break;}
}
afisare(1,fr,s);
fcloseall();
return 0;
}
void afisare( int i, long int fr[],long int &s)
{ if(s==0) return;
if(fr[i]){ fprintf(g,"%c",c[i]); fr[i]--; s--;}
else afisare(i++,fr,s);
ok=1;
for(j=1;j<i;j++) if(fr[j]) {ok=0; afisare(j,fr,s); break;}
if(ok) afisare(i++,fr,s);
}
void atribuire( char c[])
{ c[1]='a'; c[2]='b'; c[3]='c'; c[4]='d'; c[5]='e'; c[6]='f';
c[7]='g'; c[8]='h'; c[8]='i'; c[9]='j'; c[10]='k'; c[11]='l';
c[12]='m'; c[13]='n'; c[14]='o'; c[15]='p'; c[16]='q'; c[17]='r';
c[18]='s'; c[19]='t'; c[20]='u'; c[21]='v'; c[22]='w'; c[23]='x'; c[24]='y'; c[25]='z';
}