解题思路:
注意事项:
参考代码:
#include <stdio.h>
#include <stdlib.h>
int flag1[10]={0},flag2[10]={0};
int v,n,ls;
int ans=0;
int check_1(int x)
{
int len=0;
int r;
while(x)
{
r=x%10;
if(flag1[r])
return 0;
flag1[r]=1;
x /= 10;
len++;
}
ls = 9-len;
return 1;
}
int check_2(int x)
{
int r,len=0;
int i;
for(i=0;i<10;i++)
flag2[i]=flag1[i];
while(x)
{
r=x%10;
if(flag2[r])
return 0;
flag2[r]=1;
len++;
x /= 10;
}
return len;
}
void dfs(int len,int x)
{
int i,j;
if(len<=ls/2)
{
if(check_2(x*v)==ls-len)
ans++;
for(i=1;i<10;i++)
{
if(flag1[i])
continue;
flag1[i]=1;
dfs(len+1,x*10+i);
flag1[i]=0;
}
}
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<n;i++)
{
flag1[0]=1;
if(check_1(i))
{
v=n-i;
dfs(0,0);
}
for(j=0;j<10;j++)
{
flag1[j]=0;
flag2[j]=0;
}
}
printf("%d",ans);
return 0;
}
0.0分
0 人评分