Pagini recente » Cod sursa (job #539281) | Cod sursa (job #238828) | Cod sursa (job #974250) | Cod sursa (job #1064162) | Cod sursa (job #112104)
Cod sursa(job #112104)
#include <stdio.h>
long a[30],Suma,S;
void citire()
{
freopen ("ordine.in","r",stdin);
char c;
scanf("%c",&c);
while (!feof(stdin))
{
a[c-'a']++;
scanf("%c",&c);
}
fclose(stdin);
}
void adun()
{
for (int i=0;i<=26;i++)
Suma+=a[i];
S=Suma;
}
int caut(){
for (int i=0;i<27;i++)
if (a[i]==((Suma)/2+1) && a[i]!=0)
return i;
return -1;
}
void afisare ()
{
freopen ("ordine.out","w",stdout);
int i=0,inc,sf;
for (i=0;i<27;i++)
if (a[i]!=0)
{
inc=i;
break;
}
for ( i=i+1;i<=26;i++ )
if (a[i]!=0)
{
sf=i;
break;
}
while (Suma!=0)
{
if (caut()==-1){
int ok=1;
if (a[inc]==0 || (inc>=sf))
{
int j=0;
for (j=0;j<=26;j++)
if (a[j]!=0 && j!=inc )
{
inc=j;
break;
}
for (j=0;j<=26;j++)
if (a[j]!=0&&inc!=j)
{
ok=0;
sf=j;
break;
}
}
else{
if (a[sf]==0)
{
int i=sf+1;
for (;i<27;i++)
if (a[i]!=0)
{
sf=i;
ok=0;
break;
}
}
else
ok=0;}
if (ok==0){
a[inc]--;
a[sf]--;
Suma-=2;
printf("%c",inc+'a');
printf("%c",sf+'a');
}
if (ok==1)
{
a[inc]--;
printf ("%c",inc+'a');
Suma--;
}
}
else
{
inc=caut();
printf("%c",inc+'a');
Suma--;
a[inc]--;
}
}
fclose(stdout);
}
int main()
{
citire();
adun();
afisare();
return 0;
}