递归与递推——带分数

发布时间 2023-03-22 21:10:45作者: 小花护符

 、、、、

 代码实现

#include<bits/stdc++.h>
using namespace std;
long long a,b,c;
int vis[10];
long long n;
int ans;

bool check(int a,int c)
{
    b=n*c-a*c;
    if(a<=0||b<=0||c<=0)
        return false ;

    int num=b;
    int bk[10];
    memcpy(bk,vis,sizeof(vis));
    while(num)
    {
        int k=num%10;
        num=num/10;
        if(!k||bk[k]) return false;
        bk[k]++;
    }
    int flag=0;
    for(int i=1;i<10;i++)
    {

        if(bk[i]!=1)
        {
            flag=1;
            break;
        }

    }

    if(flag==1) return false ;
    else return true;

}
void fc(int a,int c)
{
    if(check(a,c))
    {
        ans++;
        //cout<<a<<" "<<b<<" "<<c<<endl;
    }
    for(int i=1;i<10;i++)
    {
        if(!vis[i])
        {
            vis[i]=1;
            fc(a,c*10+i);
            vis[i]=0;
        }
    }
}

void fa(int a)
{

    if(a>=n)
    {
        return;
    }
    for(int i=1;i<10;i++)
    {
        if(!vis[i])
        {
            vis[i]=1;
            fa(a*10+i);
            vis[i]=0;
        }
    }
    fc(a,c);
}


int main()
{

    cin>>n;
    fa(a);

    cout<<ans<<endl;
}

 

 

、、、、

标准解法