Cod sursa(job #110168)

Utilizator t_ralucaTrofin Raluca t_raluca Data 25 noiembrie 2007 19:14:37
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>


char s[26] , ch;
long int nrs[5000], i, l, p, j;
FILE *f;


void citire(){
p=-1;
f=fopen("ordine.in", "r");

while(!feof(f)){
   fscanf(f, "%c", &ch);
   if(feof(f)!=0){break;}

   if(p==-1){p++; s[p]=ch;nrs[p]=1;}
   else if (s[p]==ch){nrs[p]++;}
   else if(s[p]>ch){
       // gasesc pozitia in tabloul s unde trebuie inserat ch
       i=p;
       while(s[i]>ch && i>=0) {i--;}
       if(s[i]==ch &&i>=0){nrs[i]++;}
       else{
	  p++;
	  for(j=p; j>i+1; j--){
	     s[j]= s[j-1];
	     nrs[j]= nrs[j-1];
	  }

	 s[i+1]=ch;
	 nrs[i+1]=1;
       }
   }
   else if (s[p]<ch && p>=0){ p++; s[p]=ch; nrs[p]=1;}

}
fclose(f);
}


void afisare(){
int gata; char cprec;
gata=0;
f=fopen("ordine.out", "w");
fprintf(f, "%c" , s[0]);
cprec=s[0]; nrs[0]--;

while(gata==0){
 i=0;
 while ((i<=p) && (s[i]==cprec || nrs[i]==0) ){
   i++;
 }
 fprintf(f, "%c", s[i]) ;
 nrs[i]--;
 cprec=s[i];
 if(i>p){gata=1;}
}
 fclose(f);
}

int main(){
citire();
afisare();
return 0;
}