10福州现场赛签到题
暴力搜索
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "math.h"
int hash[11];
char s1[11],s2[11],s3[11];
int find(int a,int b,int c,int d,int e)
{
__int64 aa,bb,cc;
int num[11],i,sum;
sum=0;
num[1]=a;
num[2]=b;
num[3]=c;
num[4]=d;
num[5]=e;
if (strlen(s1)!=1 && num[s1[0]-64]==0 ) return 0;
if (strlen(s2)!=1 && num[s2[0]-64]==0 ) return 0;
if (strlen(s3)!=1 && num[s3[0]-64]==0 ) return 0;
aa=bb=cc=0;
for (i=0;s1[i];i++)
aa=aa*10+num[s1[i]-64];
for (i=0;s2[i];i++)
bb=bb*10+num[s2[i]-64];
for (i=0;s3[i];i++)
cc=cc*10+num[s3[i]-64];
if (aa+bb==cc) sum++;
if (aa-bb==cc) sum++;
if (aa*bb==cc) sum++;
if (bb!=0 && aa/bb==cc && aa%bb==0) sum++;
return sum;
}
int main()
{
int temp,k,i,n,i1,i2,i3,i4,i5,ans;
scanf("%d",&n);
while (n--)
{
getchar();
scanf("%s%s%s",s1,s2,s3);
memset(hash,0,sizeof(hash));
ans=0;
for (i1=0;i1<=9;i1++)
if (hash[i1]==0)
for (i2=0;i2<=9;i2++)
if (i2!=i1 && hash[i2]==0)
for (i3=0;i3<=9;i3++)
if (i3!=i2 && i3!=i1 && hash[i3]==0 )
for (i4=0;i4<=9;i4++)
if (i4!=i1 && i4!=i2 && i4!=i3 && hash[i4]==0)
for (i5=0;i5<=9;i5++)
if (i5!=i1 && i5!=i2 && i5!=i3 && i5!=i4 && hash[i5]==0)
ans+=find(i1,i2,i3,i4,i5);
temp=1;
memset(hash,0,sizeof(hash));
for (i=0;s1[i];i++)
hash[s1[i]-64]=1;
for (i=0;s2[i];i++)
hash[s2[i]-64]=1;
for (i=0;s3[i];i++)
hash[s3[i]-64]=1;
k=10;
for (i=1;i<=5;i++)
if (hash[i]==1) k--;
for (i=1;i<=5;i++)
if (hash[i]==0)
{
temp*=k;
k--;
}
printf("%d\n",ans/temp);
}
return 0;
}