[蓝桥杯][2013年第四届真题]带分数

思路

  1. 枚举(1 sim 9)的全排序
  2. 枚举分界处的位置

时间复杂度:(O(9! imes 9 imes C_8^3))

int path[10];
bool vis[10];
int n;
int ans;

void dfs(int u)
{
    if(u == 9)
    {
        int a=0;
        for(int i=0;i<7;i++)
        {
            a=a*10+path[i];
            int b=0;
            for(int j=i+1;j<8;j++)
            {
                b=b*10+path[j];
                int c=0;
                for(int k=j+1;k<9;k++)
                    c=c*10+path[k];
                if(a*c+b == c*n) ans++;
            }
        }
        return;
    }

    for(int i=1;i<=9;i++)
        if(!vis[i])
        {
            vis[i]=true;
            path[u]=i;
            dfs(u+1);
            vis[i]=false;
        }
}

int main()
{
    cin>>n;

    dfs(0);

    cout<<ans<<endl;
    //system("pause");
    return 0;
}

(STL)解法

int num[10];
int n;
int ans;

int main()
{
    cin>>n;

    for(int i=0;i<9;i++) num[i]=i+1;

    do
    {
        int a=0;
        for(int i=0;i<7;i++)
        {
            a=a*10+num[i];
            int b=0;
            for(int j=i+1;j<8;j++)
            {
                b=b*10+num[j];
                int c=0;
                for(int k=j+1;k<9;k++)
                    c=c*10+num[k];
                if(a*c+b == c*n) ans++;
            }
        }
    }while(next_permutation(num,num+9));
    
    cout<<ans<<endl;

    //system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14531927.html