POJ 1426 Find The Multiple(大数取模)DFS||BFS

Posted 00isok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1426 Find The Multiple(大数取模)DFS||BFS相关的知识,希望对你有一定的参考价值。

<题目链接>

题目大意:

给一个小于200的正整数n,问只有0和1组成的位数小于100的最小能被n整除的数是多少。

解题分析:

用DFS或者BFS沿着位数进行搜索,每一次搜索到下一位都有两种情况,0或者1,还要注意的是,大数取模的方法。但是我有一个疑问,这题位数最高为100,用dfs为什么不会超时?还是说只是此题数据太弱吗?

 

BFS解法

#include<iostream>
#include<cstdio>
#include<queue>
#include<string>
#include<algorithm>
using namespace std;

inline bool big_mod(string &s,int mod)       //大数取模运算
{
    int ans=0;
    for( int i=0;i<s.size();i++)
    {
        ans=(ans*10+s[i]-0)%mod;
    }
    return ans==0;
}

string bfs(int n)
{
    queue<string>q;
    q.push("1");      //首位一定为1
    while(!q.empty())
    {
        string top=q.front();
        q.pop();
        if(big_mod(top,n))    //如果该数能被n整除,则符合
        {
            return top;
        }
        for(int i=0;i<2;i++)
        {
            string temp=top+char(0+i);
            if(big_mod(temp,n))
            {
                return temp;
            }
            q.push(temp);
        }
    }
}

int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        cout<<bfs(n)<<endl;
    }
    return 0;
}

 

DFS解法

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

bool flag;
char s[110];

void dfs(int mod,int d,int n)
{
    if(d>100) return ;
    if(mod==0)
    {
        flag=true;
        s[d]=0;
        return ;
    }
    if(!flag)
    {
        s[d]=0;
        dfs((mod*10)%n,d+1,n);   
    }
    if(!flag){
        s[d]=1;
        dfs((mod*10+1)%n,d+1,n); 
    }
}

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;
        memset(s,0,sizeof(0));
        s[0]=1;        //首位为1
        flag=false;
        dfs(1,1,n);
        printf("%s
",s);
    }
    return 0;
}

 

 

2018-08-28

以上是关于POJ 1426 Find The Multiple(大数取模)DFS||BFS的主要内容,如果未能解决你的问题,请参考以下文章

广搜+打表 POJ 1426 Find The Multiple

POJ - 1426 Find The Multiple

搜索POJ1426:Find The Multiple

POJ 1426 - Find The Multiple - [DP][BFS]

[题解] [BFS] POJ 1426 - Find The Multiple

POJ1426 Find The Multiple