码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-28 23:57:33      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:iostream   push   size   big   tar   整数   ret   get   两种   

<题目链接>

题目大意:

给一个小于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\n",s);
    }
    return 0;
}

 

 

2018-08-28

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

标签:iostream   push   size   big   tar   整数   ret   get   两种   

原文地址:https://www.cnblogs.com/00isok/p/9551466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!