zoukankan      html  css  js  c++  java
  • 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 ", 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
    ", 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的范围内一定能找到解呢???有待考证



  • 相关阅读:
    烯烃(olefin) 题解
    二分图的考验 题解
    树上的好题
    [SDOI2013]直径 题解
    [ZJOI2010]数字计数 题解
    神在夏至祭降下了神谕 题解
    洛谷 P4198 楼房重建 题解
    [HAOI2010]软件安装 题解
    [POI2011]ROT-Tree Rotations 题解
    可并堆之左偏树浅谈
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6961781.html
Copyright © 2011-2022 走看看