带分数

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

int m,ans;

bool x[10],y[10];

bool check(int a,int c)
{
    long long b=m*(long long)c-a*c;
    
    
    if (!a || !b || !c) return false;
    
    memcpy(y,x, sizeof x);
    
    while(b)
    {
        int p=b%10;
        
        b/=10;
        
        if(y[p]||!p)return false;
        else y[p]=true;
    }
    for(int i=1;i<=9;i++)
    {
        if(!y[i])
        {
            return false;
        }
    }
    return true;
}

void dfsc(int a,int u,int c)
{
   if(u>9)return ;
   if(check(a,c))ans++;
   for(int i=1;i<=9;i++)
   {
      if(!x[i]){
          
          x[i]=true;
          
          dfsc(a,u+1,c*10+i);
          
          x[i]=false;
      }
   }
}
void dfsa(int u,int a)
{
   
   if(a>=m||u>9)return ;
  
   dfsc(a,u,0);
   
   for(int i=1;i<=9;i++)
   {
       if(!x[i])
       {
          x[i]=true;
          
          dfsa(u+1,a*10+i);
          
          x[i]=false;
       }
     
   }
}
int main()
{
    cin>>m;
    
    dfsa(0,0);
    
    cout<<ans;
    
    return 0;
    
}

全部评论

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务