POJ 1426 Find The Multiple (DFS / BFS)

题目链接:Find The Multiple


解析:直接从前往后搜。设当前数为k用long long保存,则下一个数不是k*10就是k*10+1



AC代码:

/*
DFS
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;

long long n;
int DEEP;
bool flag;

void dfs(long long k, int deep){
    if(flag) return ;
    if(deep >= DEEP) return ;    //。!

! if(k % n == 0){ flag = true; printf("%lld\n", k); return ; } dfs(k*10, deep+1); dfs(k*10+1, deep+1); } int main(){ // freopen("in.txt", "r", stdin); while(scanf("%lld", &n) == 1 && n){ flag = false; for(DEEP=1; ; DEEP++){ //!

。! if(flag) break; dfs(1, 0); } } return 0; }

个人感觉这样的DFS的方式。事实上还是在模拟BFS。用DEEP控制搜索的深度,当第一层搜不到的时候,DEEP++,继续搜第二层。。

。。直到找到结果。



BFS还是非常好懂得~

/*
BFS
*/
#include <cstdio>
#include <queue>
using namespace std;

long long n;

void bfs(long long k, long long n){
    queue<long long> q;
    q.push(k);
    while(!q.empty()){
        long long x = q.front(); q.pop();
        if(x % n == 0){
            printf("%lld\n", x);
            return ;
        }
        q.push(x*10);
        q.push(x*10+1);
    }
    return ;
}

int main(){
//    freopen("in.txt", "r", stdin);
    while(scanf("%lld", &n) == 1 && n){
        bfs(1, n);
    }
    return 0;
}



可是还是有个疑点,为什么就能确定在long long的范围内一定能找到解呢???有待考证



posted on 2017-06-08 11:08  yjbjingcha  阅读(149)  评论(0编辑  收藏  举报

导航