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; }