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