FTL

From Algopedia
Revision as of 11:30, 19 June 2013 by Cristian (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
/*
   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;
}