首页 > 代码库 > 暴力穷举

暴力穷举

                                                               暴力除法
题目描述
输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79


输入
输入包括多行,每行一个正整数n,2<=n<=79


输出
针对每个输入的n,从小到大输出该表达式,若没有表达式可以生成,则不输出。


样例输入
62
样例输出
79546/01283=62

94736/01528=62


#include<iostream>
#include<string.h>
usingnamespace std;
intde(intm,intn)
{
    intx[10];
    memset(x,0,sizeof(x));
    intk=0;
    while(m!=0)
    {
        x[k++]=m%10;
        m=m/10;
    }
    while(n!=0)
    {
        x[k++]=n%10;
        n=n/10;
    }
    for(inti=0;i<10;i++)
    {
        for(intj=i+1;j<10;j++)
        {
            if(x[i]==x[j])
                return0;
        }
    }
    return1;
}
intmain()
{
    intn;
    while(cin>>n)
    {
        for(inti=01234;i<=98765;i++)
        {
            intj=i*n;
            if(j>1000&&j<100000)
            {
                if(de(i,j)==1)//不重复
                {
                    if(i<10000)
                    cout<<j<<‘/‘<<0<<i<<‘=‘<<n<<endl;
                    elsecout<<j<<‘/‘<<i<<‘=‘<<n<<endl;
                }
            }
        }
    }
   return0;
}
 
此题着重考虑时间超限问题,不可以从头至尾依次循环

直接找到满足乘积关系的值可以大大缩小运算量,同时需要一个函数来判断是否有重复元素