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