题目:
问题:自己看了题解之后写了代码,可是还是出不来,不懂是哪里出错了,请大家指教!!!!!!
我的代码:
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int len[20],letter[20],dex,n,i,j,ans,num[200],flag[200];
char str[20][20];
int check()
{
for(i = 0;i < n; i++)
{
if(num[str[i][0]] == 0)
return 0;
}
int jin = 0;
for(j = 0;j < len[n - 1]; j++)
{
if(num[str[n - 1][len[n - 1] - 1 - j]] == -1)
return 1;
int sum = jin;
for(i = 0;i < n - 1; i++)
{
if(len[i] - 1 - j < 0)
continue;
if(num[str[i][len[i] - 1 - j]] == -1)
return 1;
sum += num[str[i][len[i] - 1 - j]];
}
if(sum % 10 != num[str[n - 1][len[n - 1] - 1 - j]])
return 0;
jin = sum / 10;
}
return !jin;
}
void dfs(int dex)
{
if(dex == -1)
{
ans++;
return;
}
for(i = 0;i < 10; i++)
{
if(flag[i] == 0)
{
flag[i] = 1;
num[letter[dex]] = i;
if(check())
dfs(dex - 1);
flag[i] = 0;
num[letter[dex]] = -1;
}
}
}
int main()
{
while(scanf("%d",&n) != EOF)
{
dex = -1;
memset(num,0,sizeof(num));
for(i = 0;i < n; i++)
{
scanf("%s",str[i]);
len[i] = strlen(str[i]);
for(j = 0;j < len[i]; j++)
{
if(!num[str[i][j]])
{
num[str[i][j]] = 1;
letter[++dex] = str[i][j];
}
}
}
ans = 0;
memset(num,-1,sizeof(num));
memset(flag,0,sizeof(flag));
dfs(dex);
printf("%d\n",ans);
}
return 0;
}