FTL
From Algopedia
/*
Nume program : FTL.c
Nume concurent : Alexandru Pacurar
*/
#include <stdio.h>
#include <stdlib.h>
int dec[30],v1[5],v2[5];
int main()
{
int a,sum,s,p,i,j,n,max;
char c;
i=0;
max=0;
scanf("%d",&dec[i]);
if(dec[i]>max)
max=dec[i];
n=1;
c=getchar();
i++;
while(c==' ')
{
scanf("%d",&dec[i]);
if(dec[i]>max)
max=dec[i];
n++;
c=getchar();
i++;
}
if(n<=2)
{
if(n==2)
{
i=0;
while(dec[i]==0)
i++;
a=dec[i];
i++;
while(dec[i]==0)
i++;
if(a==dec[i])
dec[i]--;
else
{
if(a>dec[i])
{
a=dec[i];
i=0;
while(dec[i]==0)
i++;
dec[i]=a;
}
else
dec[i]=a;
}
}
else
{
i=0;
while(dec[i]==0)
i++;
dec[i]=0;
}
}
else
{
i=0;
a=dec[i];
p=1;
j=4;
while(a>0)
{
v1[j]=a%2;
p=p*10;
a=a/2;
j--;
}
i++;
a=dec[i];
p=1;
j=4;
while(a>0)
{
v2[j]=a%2;
p=p*10;
a=a/2;
j--;
}
j=0;
if(v1[j]!=v2[j])
v1[j]=1;
j++;
if(v1[j]!=v2[j])
v1[j]=1;
j++;
if(v1[j]!=v2[j])
v1[j]=1;
j++;
if(v1[j]!=v2[j])
v1[j]=1;
j++;
if(v1[j]!=v2[j])
v1[j]=1;
i=2;
for(j=0;j<5;j++)
v2[j]=0;
while(i<n)
{
a=dec[i];
p=1;
j=4;
while(a>0)
{
v2[j]=a%2;
p=p*10;
a=a/2;
j--;
}
j=0;
if(v1[j]!=v2[j])
v1[j]=1;
else
v1[j]=0;
j++;
if(v1[j]!=v2[j])
v1[j]=1;
else
v1[j]=0;
j++;
if(v1[j]!=v2[j])
v1[j]=1;
else
v1[j]=0;
j++;
if(v1[j]!=v2[j])
v1[j]=1;
else
v1[j]=0;
j++;
if(v1[j]!=v2[j])
v1[j]=1;
else
v1[j]=0;
for(j=0;j<5;j++)
v2[j]=0;
i++;
}
p=10000;
s=0;
for(j=0;j<5;j++)
{
s=v1[j]*p+s;
p=p/10;
}
p=1;
sum=0;
while(s>0)
{
sum=sum+s%10*p;
s=s/10;
p=p*2;
}
i=0;
if(sum==0 || sum>max)
sum=1;
while(dec[i]<sum)
i++;
dec[i]=dec[i]-sum;
}
printf("%d",dec[0]);
i=1;
while(i<n)
{
printf(" %d",dec[i]);
i++;
}
printf("\n");
return 0;
}