gravatar

Blog # 06 : Crypt Arithmetic Problem

A program to solve Crypt Arithmetic Problem

#include<iostream>
#include<math.h>
using namespace std;

int size;
char a[10],b[10],c[11],d[11];
int an,bn,cn;
int n[10];
int ct=0;
int maxchar;
void gen(int z,int avail[10]);
void check();
void calc()
{
    int i;
  if(maxchar>10)
  {
      cout<<"wrong input";
      return;
  }
  int avail[10];
  for(i=0;i<=9;i++)
    avail[i]=1;
  gen(0,avail);

}
int no[10];
void gen(int z,int avail[10])
{
    if(z<maxchar)
    {
    int i;
    for(i=0;i<10;i++)
    {
        no[z]=i;
        if(avail[i]==1)
        {
            avail[i]=0;
            gen(z+1,avail);
            avail[i]=1;
        }
    }
    }
    if(z==maxchar)
      check();
}




void check()
{
        an=bn=cn=0;
    int i,j;
  for(i=0;i<strlen(a);i++)
  {
      for(j=0;j<maxchar;j++)
       if(a[i]==d[j])
       {
          if(i==0&&no[j]==0)
           return;
           an+=(floor(pow(10,strlen(a)-i-1)))*no[j];
       }
  }
   for(i=0;i<strlen(b);i++)
  {
      for(j=0;j<maxchar;j++)
       if(b[i]==d[j])
       {
        if(i==0&&no[j]==0)
           return;
           bn+=(floor(pow(10,strlen(b)-i-1)))*no[j];
       }
  }
   for(i=0;i<strlen(c);i++)
  {
      for(j=0;j<maxchar;j++)
       if(c[i]==d[j])
       {
        if(i==0&&no[j]==0)
           return;
           cn+=(floor(pow(10,strlen(c)-i-1)))*no[j];
       }
  }
  if(an+bn==cn)
  {
      cout<<"\n";
      for(i=0;i<maxchar;i++)
      {

          cout<<d[i]<<"-"<<no[i]<<" ";
      }
      exit(0);
  }
  ct++;

}

void setchar()
{
    int i=0,j,flag,k=0;
    for (i=0;i<strlen(b);i++)
    {
        flag=0;
        for (j=0;j<k;j++)
            if (a[i]==d[j])
                flag=1;
        if (flag==0)
            d[k++]=a[i];
    }
    for (i=0;i<strlen(b);i++)
    {
        flag=0;
        for (j=0;j<k;j++)
            if (b[i]==d[j])
                flag=1;
        if (flag==0)
            d[k++]=b[i];
    }
    for (i=0;i<strlen(c);i++)
    {
        flag=0;
        for (j=0;j<k;j++)
            if (c[i]==d[j])
                flag=1;
        if (flag==0)
            d[k++]=c[i];
    }
  maxchar=k;
}

int main()
{
    cin>>a;
    cin>>b;
    cin>>c;

    setchar();
    d[maxchar]='\0';
    cout<<d;
    calc();
}

gravatar
This comment has been removed by a blog administrator.