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的范围内一定能找到解呢???有待考证



  • 相关阅读:
    setValue 和 setObject 的区别
    沙盒(SandBox)
    刷题篇--热题HOT 52-60
    刷题篇--热题HOT 31-40
    刷题篇--热题HOT 41-51
    8. AIO
    7. NIO与零拷贝
    6. NIO三核心(Selector)
    5. NIO三核心(Buffer、Channel)
    刷题篇--热题HOT 21-30
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6961781.html
Copyright © 2011-2022 走看看